Javascript OSX Safari帧加载中断

Javascript OSX Safari帧加载中断,javascript,safari,osx-yosemite,Javascript,Safari,Osx Yosemite,我有一个基本的HTML网站(带有一些javascript),使用一个简单的锚定标记下载一个文件,如下所示: <a href="../resources/mexml/MexmlSamples-1.0.zip">Mexml Samples 1.0</a> 当在OS X上使用Chrome和在Windows 7上使用IE下载文件时,这与预期一样有效。文件下载后,我会在我的GA帐户中看到该事件 当我在优胜美地的Safari8中测试它时,该文件确实下载了,但GA很少看到这个事件。当

我有一个基本的HTML网站(带有一些javascript),使用一个简单的锚定标记下载一个文件,如下所示:

<a href="../resources/mexml/MexmlSamples-1.0.zip">Mexml Samples 1.0</a>
当在OS X上使用Chrome和在Windows 7上使用IE下载文件时,这与预期一样有效。文件下载后,我会在我的GA帐户中看到该事件

当我在优胜美地的Safari8中测试它时,该文件确实下载了,但GA很少看到这个事件。当然,我在Safari错误控制台中得到了可怕的
加载资源失败:帧加载中断

我假设我得到GA事件有时是因为Safari中断操作和GA代码触发之间的竞争条件

那么,在Safari中可以做些什么来解决这个问题,以便我始终获得GA事件

请注意,我的问题可能与此未回答的问题具有相同的根本原因:

6月6日更新

我现在完全糊涂了。我只是注意到,如果我打开一个新的浏览器页面到我的站点(在Safari中),并点击下载,那么它会被GA记录。但是随后的点击仍然会下载文件,但不会被GA记录

如果我关闭该窗口并打开一个新窗口,那么GA会再次记录第一次下载

相比之下,当使用Chrome时,每次下载都会被GA记录下来

我现在想我可能看错了问题。我看到的行为告诉我Safari在JavaScript中维护一个状态,允许第一个GA调用通过,但阻止所有后续调用


但这与Chrome运行的代码相同,所以我甚至不知道从哪里开始调试这个问题。

我能想到的唯一解决方案是等待GA请求完成,并且只有在设置location.href到所需的文件下载链接之后。但从用户的角度来看,这并不是很好。(这可以通过点击回调来实现)

href的HTML5下载属性可能会解决这个问题。
我没有OSX与safari一起测试,所以这只是我的想法。

如果您总是想获得ga事件,那么hitCallback可能是唯一的方法,直到safari的任何问题得到解决。我使用类似的模式从应用程序中的页面发送GA事件,这只是在rails中执行了整个数据库负载之后的重定向。将javascript重定向添加到回调中没有明显的延迟。然而,我不知道如何从头开始从javascript下载

ga('send','event','Download','MexmlSample','MexmlSample-1.0', {
   hitCallback: function(){
   initiateDownload();
   })

在本例中,我不知道有任何需要使用setTimeout()for模式。

等待GA请求完成对用户来说是件难事-我宁愿保持当前状态。至于HTML5
download
属性,Safari目前不支持。完全同意丑陋。我还发现了关于标记的target=“\u blank”属性的有趣注释。希望这能有所帮助这是关于
目标的一个好观点。今天晚些时候我会试试的。不幸的是,目标没有帮助——我的浏览器中留下了银行页面!然而,我现在认为问题可能在Safari的其他地方(见更新),如果我省略HTTP内容类型,文件将作为文本文件下载。不过,浏览器错误控制台中仍然会出现错误消息。我现在怀疑Safari正在以阻止实际调用的方式破坏我的GA代码。在我看来,Safari正在迅速成为新的IE。随着时间的推移,情况似乎也越来越糟。您在
.zip
文件上设置了什么http头?您是否设置了内容处置:附件?jQuery是否将事件监听器设置为捕获监听器?(如果仍未解决…)我认为在单击传播到
mybutton
之前,您可能会看到一个页面导航。这是div包装
元素的
id
ga('send','event','Download','MexmlSample','MexmlSample-1.0', {
   hitCallback: function(){
   initiateDownload();
   })