谷歌分析干扰Android浏览器中的history.back()?

时间:2011-11-12 03:41:48

标签: javascript android html5 google-analytics android-browser

我有一个html5移动应用程序,其中所有内容都存在于单个页面上,我使用history.back / popstate / etc来更改页面内容(通过jQuery Mobile)。我正在使用Google Analytics跟踪各种活动,并在一个页面上跟踪用户是否通过特定按钮退出:

$('#my-back-button').bind('tap', function() {
    _gaq.push(['_trackEvent', 'mycategory', 'myaction']);
    history.back();
    return false;
});

在android 2.2浏览器中,调用了history.back(),但是没有触发onpopstate,并且页面没有被更改。如果我在history.back()之前放置window.onpopstate = function() { alert("!"); };,我看不到警告。

如果我颠倒了两行(先是history.back(),然后是_gaq.push),它似乎可以工作,但我不能在整个代码中依赖这种排序。

没有抛出异常。它在iOS和桌面Chrome中运行良好。

任何想法为什么history.back()在谷歌分析调用后无效?

3 个答案:

答案 0 :(得分:2)

尝试将调用包装在_ gaq.push()中,异步超时为0:

$('#my-back-button').bind('tap', function() {
    setTimeout(function() {
         _gaq.push(['_trackEvent', 'mycategory', 'myaction']);
    }, 0);
    history.back();
    return false;
});

这可以让history.back()在Google Analytics可能影响历史记录堆栈之前先执行。

答案 1 :(得分:1)

嗯,好吧,真的很讨厌:如果你将_gaq.push()包装成一个新函数并将history.go()留在原处,会发生什么?

答案 2 :(得分:1)

也许对谷歌分析的调用会在历史堆栈中添加一个新条目,而history.back()只会将您带到目前的页面。

或GA为历史提供了新的范围。

尝试两次调用history.back()或使用top.history.back()或window.history.back()或self.history.back()