发送Google Analytics事件,然后立即导航

时间:2013-04-02 17:44:35

标签: javascript google-analytics

我可以发送Google Analytics事件并立即离开吗?

_gaq.push(['_trackEvent', 'foobar']);
window.location = "/";

如果Google Analytics在调用此方法时会执行某种AJAX请求,那么无论我们是否留在页面上,它都应该有效。我担心的是,它似乎有时只是将数据放入数组中以供以后处理。我认为这只是最初发生的,当谷歌分析还没有时间进行初始化时,但我想确定这一点。

我使用GA调试进行了测试,它似乎有效,但我不确定这是否意味着它总是取决于加载速度而不是。

我可以这样做,永远不会丢失任何事件吗?

4 个答案:

答案 0 :(得分:8)

我这样做的方式是这样的:

_gaq.push(['_trackEvent', '...', '...', '...']);
_gaq.push(function(){
    // do stuff here
});

$('#logo').on('click', function(){
    var curPage = window.location.href;
    _gaq.push(['_trackEvent', curPage, '#logo']);
    _gaq.push(function(){
        window.location.href = '/';
    });
});

第二次推送呼叫将始终在第一次推送之后运行,因为Google会对所有推送呼叫进行排队,以便第一次推送呼叫将运行并完成,然后第二次推送呼叫将运行并完成。 Google允许您将函数放入推送方法中,以便对其进行排队。

来源:https://developers.google.com/analytics/devguides/collection/gajs/#PushingFunctions

答案 1 :(得分:5)

如果新页面未在新窗口中打开,我会稍微延迟(通过setTimeout)。

我还没有机会尝试这个,但Google的新Universal Analytics有一个hitCallback函数,在数据发送后执行。

答案 2 :(得分:1)

@mike提到了analytics.js文档中描述的hitCallback方法:

  

在某些情况下,例如跟踪出站链接时,您可能想知道跟踪器何时完成发送数据。这样,只有在用户向Google Analytics报告点击后,您才能将用户发送到目的地。要解决此问题,send命令允许您在字段名称对象中指定hitCallback函数,该函数将在analytics.js完成发送数据后立即执行。

这很棒,除了代码片段仍然公开测试版。如果出于某种原因( ahem 技术恐惧政策 ahem ),您只能使用ga.js功能,则可以使用this workaround

_gaq.push(['_set', 'hitCallback', function(){
  document.location='someOtherPage.html';   
}]);
_gaq.push(['_trackEvent', 'category', 'event', 'value']);

另一个明智的建议是,如果未定义_gaq,请立即执行回调。

答案 3 :(得分:0)

看起来您对丢失事件的关注是合法的,请参阅this questionOne answer关于Google更改代码似乎有点脆弱,但在导航到链接之前会让您确认事件跟踪。这可能是“近乎即时”。