【发布时间】:2015-05-26 12:47:48
【问题描述】:
我有一个基本的 HTML 网站(带有一些 javascript),它使用一个简单的锚标记来下载文件,如下所示:
<a href="../resources/mexml/MexmlSamples-1.0.zip">Mexml Samples 1.0</a>
为了跟踪下载次数,我有一个 onclick 处理程序,它像这样将事件传递给 Google Analytics:
$('#mybutton').click(function(e){ga('send','event','Download','MexmlSample','MexmlSample-1.0');});
使用 OS X 上的 Chrome 和 Windows 7 上的 IE 下载文件时,这可以正常工作。文件下载,我在我的 GA 帐户中看到了该事件。
当我在 Yosemite 上的 Safari 8 中对其进行测试时,文件确实下载,但 GA 很少看到该事件。当然,我会在 Safari 错误控制台中看到可怕的 Failed to load resource: Frame load interrupted。
我假设我有时会因为 Safari 中断操作和 GA 代码触发之间的竞争条件而收到 GA 事件。
那么有什么办法可以在 Safari 中解决这个问题,以便我始终能收到 GA 事件吗?
请注意,我的问题可能与这个未回答问题的根本原因相同:Frame load interrupted when downloading excel files
6 月 6 日更新
我现在完全糊涂了。我刚刚注意到,如果我在我的网站(在 Safari 中)打开一个新的浏览器页面,然后单击下载,那么它就会被 GA 记录下来。但是后续点击仍然会下载文件,但不会被 GA 记录。
如果我关闭该窗口并打开一个新窗口,GA 会再次记录第一次下载。
相比之下,使用 Chrome 时,GA 会记录每次下载。
我现在想我可能看错了问题。我看到的行为告诉我 Safari 正在 JavaScript 中维护一个状态,该状态允许第一个 GA 调用通过,但阻止所有后续调用。
但这是 Chrome 运行的相同代码,所以我什至不知道从哪里开始调试问题。
【问题讨论】:
-
你在
.zip文件上设置了什么http头?你设置Content-Disposition: attachment吗? jQuery 是否也将事件侦听器设置为捕获侦听器? -
(如果仍未解决...)我认为您可能会在点击传播到
mybutton之前看到页面导航。那是 div 包装<a>元素的id吗?
标签: javascript safari osx-yosemite