10

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

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

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

我用 GA 调试做了一个测试,它似乎奏效了,但我不确定这是否意味着它总是取决于加载速度,而不是什么。

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

4

4 回答 4

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 允许您将函数放入 push 方法中,以便您可以对它们进行排队。

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

于 2013-04-02T18:03:42.043 回答
5

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

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

于 2013-04-03T14:53:07.110 回答
1

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

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

这太棒了,除了该片段处于公开测试阶段。如果由于某种原因(啊哈技术恐惧政策啊哈)您仅限于 ga.js 功能,您可以使用此解决方法

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

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

于 2013-12-08T22:35:48.777 回答
0

看起来您对失去赛事的担忧是合理的,请参阅这个问题关于谷歌更改其代码的一个答案似乎有点脆弱,但可以让您在导航到链接之前确认事件跟踪。那可能是“近乎立即的”。

于 2013-04-02T17:51:34.147 回答