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

我有一个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并且页面没有被更改。 如果我把window.onpopstate = function() { alert("!"); }; window.onpopstate = function() { alert("!"); }; 就在history.back()之前,我看不到警报。

如果我反转两行(history.back()首先,然后是_gaq.push),它似乎工作,但我不能依赖于我的代码中的这种排序。

没有例外被抛出。 它在iOS和桌面Chrome中运行良好。

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

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

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

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

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

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

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

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