1

我在我的 ASPX Web 应用程序中实现了 analytics.js(新版本)。我的综合浏览量工作得很好,但事件通常不会被发送。

在我的示例中,我尝试按下 3 个不同的按钮,但只有一个按钮触发了事件。我为每个事件添加了一个警报框,以验证它是否真的被触发了,这些都显示出来了。

提琴手 这是我的 js,放在</head>

(function(i, s, o, g, r, a, m) {
    i['GoogleAnalyticsObject'] = r;
    i[r] = i[r] || function() {
        (i[r].q = i[r].q || []).push(arguments)
    }, i[r].l = 1 * new Date();
    a = s.createElement(o), m = s.getElementsByTagName(o)[0];
    a.async = 1;
    a.src = g;
    m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-XXXXXXXX-1', {
    'cookieDomain': 'none'
});
ga('send', 'pageview', {
    'page': '/team/main',
    'title': 'Logged in'
});

$(document).ready(function() {
    $(".team_button").on("click", function() {
        ga('send', 'event', 'button', 'click', 'Team select button', {
            'page': '/team/'
        })
    });
    $(".calendar_month_prev").on("click", function() {
        ga('send', 'event', 'button', 'click', 'Calendar: Prev month', {
            'page': '/team/'
        })
    });
    $(".calendar_month_next").on("click", function() {
        ga('send', 'event', 'button', 'click', 'Calendar: Next month', {
            'page': '/team/'
        })
    });
    $(".calendar_day_selected").on("click", function() {
        ga('send', 'event', 'button', 'click', 'Calendar: Same day reload', {
            'page': '/team/'
        })
    });
    $(".calendar_day_active").on("click", function() {
        ga('send', 'event', 'button', 'click', 'Calendar: Select day', {
            'page': '/team/'
        })
    });
});

4

4 回答 4

5

加载新页面时,当前页面上的待处理请求将被取消——在本例中为分析跟踪像素请求。“异步”更多地指的是分析 JavaScript 代码的加载,然后是分析数据的处理。

对于 ga.js,一种常见的方法是停止传播点击事件,发送事件,然后在点击链接之前延迟一小段时间(150 毫秒)。

使用 analytics.js,您可以hitCallback在发送分析数据后运行代码,而不是延迟。请参阅Google Analytics 文档中的设置命中回调

于 2013-08-25T15:30:46.957 回答
1

我建议在成功注册事件后执行虚拟锚点点击:

a.onclick = function(e){
            var anchor = this;
            _gaq.push(['_trackEvent', 'Category','event','label']);
            _gaq.push(function() {
                var a = document.createElement('a');
                a.href = anchor.href;
                a.target = anchor.target;
                a.click();
            });
            return false;
        }

由于推送作为队列工作,因此您的事件请求将永远不会被取消..

于 2013-08-26T11:11:49.133 回答
1

好的,如果其他人有同样的问题,这是我修复它的方法:

我创建了一个函数来调用分析跟踪,我将页面延迟了几分之一秒:

function TrackEvent(link, category, action, label, page) {
    try {
        ga("send", "event", category, action, label, { 'page': page });
    } catch (err) { consol.log(err); }

    setTimeout(function () {
        document.location.href = link.href;
    }, 25);
}

然后,我的每个 onClick 绑定都会调用此函数,如下所示:

$(document).ready(function () {
    $(".calendar_month_prev").on("click",function(){ TrackEvent(this, 'button', 'click', 'Calendar: Prev month', '/team/main'); return false;});
    $(".calendar_month_next").on("click",function(){ TrackEvent(this, 'button', 'click', 'Calendar: Next month', '/team/main'); return false;});
    $(".calendar_day_active").on("click",function(){ TrackEvent(this, 'button', 'click', 'Calendar: Select day', '/team/main'); return false;});
});

如果这是首选的话,可以将其添加到 a href onClick 中:)

于 2013-08-25T19:22:50.773 回答
0

正如 Mike 所指出的,在这种情况下,您应该使用命中回调。此外,您还需要考虑到用户可能会使用 Ghostery 等隐私保护工具屏蔽 Google Analytics,这种情况下点击回调将永远不会执行。因此,您需要非常小心地实施这一点,以便您的网站即使对这些用户也能继续工作。以下文章解释了如何正确执行此操作:

http://veithen.github.io/2015/01/24/outbound-link-tracking.html

于 2015-01-26T20:03:25.967 回答