我有一个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()在谷歌分析调用后无效?
答案 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)
答案 2 :(得分:1)
也许对谷歌分析的调用会在历史堆栈中添加一个新条目,而history.back()只会将您带到目前的页面。
或GA为历史提供了新的范围。
尝试两次调用history.back()或使用top.history.back()或window.history.back()或self.history.back()