Pet*_*r M 25 javascript safari osx-yosemite
我有一个基本的HTML网站(有一些javascript)使用一个简单的锚标签下载文件,如下所示:
<a href="../resources/mexml/MexmlSamples-1.0.zip">Mexml Samples 1.0</a>
Run Code Online (Sandbox Code Playgroud)
为了跟踪下载次数,我有一个onclick处理程序将事件传递给Google Analytics,如下所示:
$('#mybutton').click(function(e){ga('send','event','Download','MexmlSample','MexmlSample-1.0');});
Run Code Online (Sandbox Code Playgroud)
这在使用OS X上的Chrome和Windows 7上的IE下载文件时按预期工作.文件下载,我在GA帐户中看到该事件.
当我在Yosemite上的Safari 8中测试时,该文件会下载,但GA很少看到该事件.当然,我Failed to load resource: Frame load interrupted在Safari错误控制台中遇到了可怕的问题.
我假设我有时会因为Safari中断动作和GA代码触发之间的竞争条件而得到GA事件.
那么在Safari中可以做些什么来解决这个问题,以便我总能得到GA事件?
请注意,我的问题可能与此未解答的问题具有相同的根本原因:下载excel文件时帧加载中断
6月6日更新
我现在彻底困惑了.我刚刚注意到,如果我打开一个新的浏览器页面到我的网站(在Safari中),然后点击下载,那么它会被GA记录下来.然而,随后的点击下载仍然是文件,但不会被GA记录.
如果我关闭该窗口并打开一个新窗口,则GA会再次记录第一次下载.
相比之下,使用Chrome时,GA会记录每次下载.
我现在想我可能正在看错了问题.我看到的行为告诉我Safari正在使用JavaScript保持一个状态,允许第一个GA调用通过,但阻止所有后续调用.
但这与Chrome运行的代码相同,所以我不知道如何开始调试问题.
我能想到的唯一解决方案是等待 GA 请求完成,并且只有在此之后才将 location.href 设置为所需的文件下载链接。但从用户的角度来看,这并不是一件好事。(这可以通过点击回调来实现https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#hitCallback)。
也许 HTML5 的 href 下载属性可以解决这个问题。我没有 OSX 和 safari 来测试,所以这只是我的想法。