我正在使用 Google Analytics 并在分析请求完成后进行重定向。
我正在使用这段代码:
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-12345678-1']);
_gaq.push(['_trackPageview']);
_gaq.push(function () {
window.location.replace("myRedirectToUri");
});
这没有正确执行。
重定向在 Firefox 上正确完成(作为分析回调),但在其他浏览器(IE、Chrome、Safari)上却没有,所以我丢失了分析数据。
目前我已将超时设置为 1 秒,但这不是真正的解决方案。
对如何正确实现这个有什么帮助吗?
最佳答案
目前这个问题还没有很好的解决办法。您能做的最好的事情就是添加超时以延迟重定向。目前没有回调到 _trackPageview。当它返回时意味着它开始跟踪,但在 __utm.gif 请求完成之前不能保证它已经成功注册了页面浏览量。
1 秒超时可能太多了。我通常将超时保持在 200-400 毫秒左右。
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
_gaq.push(['_trackPageview']);
_gaq.push(function () {
setTimeout(function(){
window.location.href = newUrl;
}, 200);
});
编辑:
从我最初发布这个答案到现在已经有 2 年了,从那时起,Google Analytics 已经取得了长足的进步。
现在有一个正确的方法来做到这一点:
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
_gaq.push(['_set','hitCallback',function(){
window.location.href = newUrl;
}]);
_gaq.push(['_trackPageview']);
如果您已使用 analytics.js 迁移到 Universal Analytics,则等效项为:
ga('create', 'UA-XXXXXXX-X')
ga('send', 'pageview', {
'hitCallback': function() {
window.location.href = newUrl;
}
});
编辑 2
这是执行此操作的更正确方法,以确保即使 Google Analytics(分析)代码被扩展程序或广告拦截器阻止或篡改,您的代码也能执行。
var t = undefined;
var myCode = function(){
window.clearTimeout(t);
t = undefined;
window.location.href = newUrl;
};
t = setTimeout(myCode, 3000);
ga('create', 'UA-XXXXXXX-X')
ga('send', 'pageview', {
'hitCallback': myCode
});
关于JavaScript 在谷歌分析后执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9309456/