我可以发送Google Analytics事件并立即离开吗?
_gaq.push(['_trackEvent', 'foobar']);
window.location = "/";
如果Google Analytics在调用此方法时会执行某种AJAX请求,那么无论我们是否留在页面上,它都应该有效。我担心的是,它似乎有时只是将数据放入数组中以供以后处理。我认为这只是最初发生的,当谷歌分析还没有时间进行初始化时,但我想确定这一点。
我使用GA调试进行了测试,它似乎有效,但我不确定这是否意味着它总是取决于加载速度而不是。
我可以这样做,永远不会丢失任何事件吗?
答案 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 question。 One answer关于Google更改代码似乎有点脆弱,但在导航到链接之前会让您确认事件跟踪。这可能是“近乎即时”。