Google Analytics 会干扰 Android 浏览器中的 history.back() 吗?
Posted
技术标签:
【中文标题】Google Analytics 会干扰 Android 浏览器中的 history.back() 吗?【英文标题】:Google Analytics interferes with history.back() in android browser? 【发布时间】:2011-12-27 11:50:07 【问题描述】:我有一个 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("!"); ;
放在 history.back() 之前,我看不到任何警报。
如果我颠倒这两行(首先是history.back(),然后是_gaq.push),它似乎可以工作,但我不能在我的代码中依赖这种排序。
没有抛出异常。它在 ios 和桌面 Chrome 中运行良好。
任何想法为什么 history.back() 在谷歌分析调用后不起作用?
【问题讨论】:
我遇到了完全相同的问题。自从本月前第一次发布以来,我认为您没有提出解决方案或解决方法,是吗? 抱歉,我没有找到解决方法。我们最终只是停止使用谷歌分析,并且避免将代码放在 history.back() 附近。 我不记得有同样的问题,但是通过 javascript 查看我构建的 HTML5 应用程序(现在是一年半前),我通过一个函数将调用委托给 Google Analytics在需要它的其他函数/调用结束时调用。 使用 window.onhashchange 代替 window.onpopstate 有什么改变吗? @RTB 【参考方案1】:尝试将调用 _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 可能影响历史堆栈之前首先执行。
【讨论】:
这对我有用,非常好。 @DurhamG 可以确认这是否也适用于他吗?然后我会给你奖金。【参考方案2】:嗯,好吧,真的很讨厌:如果您将 _gaq.push() 包装到一个新函数中并将 history.go() 留在原处会发生什么?
【讨论】:
【参考方案3】:也许对谷歌分析的调用会在历史堆栈中添加一个新条目,而 history.back() 只会将您带到您当前所在的页面。
或者 GA 为历史提供了一个新的范围。
尝试调用 history.back() 两次或使用 top.history.back() 或 window.history.back() 或 self.history.back()
【讨论】:
以上是关于Google Analytics 会干扰 Android 浏览器中的 history.back() 吗?的主要内容,如果未能解决你的问题,请参考以下文章
我更改了网站软件,需要在Google Analytics网站搜索的网址中找到使用查询字符串的替代方法
测试Google广告和Google Analytics脚本会显示空白页面