【问题标题】:OSX Safari Frame Load InterruptedOSX Safari 帧加载中断
【发布时间】: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 包装 &lt;a&gt; 元素的 id 吗?

标签: javascript safari osx-yosemite


【解决方案1】:

如果您总是想获得 ga 事件,那么在修复 Safari 的任何问题之前,hitCallback 可能是唯一的方法。我使用类似的模式从应用程序中的页面发送 GA 事件,这只是在 Rails 中执行了整个数据库内容之后的重定向。将 javascript 重定向添加到回调中没有明显的延迟。但是,我不确定如何从头顶开始从 javascript 下载。

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

我不知道在这种情况下需要对模式使用 setTimeout()。

【讨论】:

  • 我现在怀疑 Safari 正在以阻止实际调用的方式搞砸我的 GA 代码。
  • 在我看来,Safari 正在迅速成为新的 IE。随着时间的推移,情况似乎也在恶化。
【解决方案2】:

我能想到的唯一解决方案 - 等待 GA 请求完成,然后再将 location.href 设置为所需的文件下载链接。但这从用户的角度来看并不是很好。 (这可以通过点击回调https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#hitCallback 来实现)。

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

【讨论】:

  • 等待 GA 请求完成对用户来说是丑陋的 - 我宁愿保持目前的情况。至于HTML5的download属性,目前Safari不支持。
  • 关于target 的观点很好。我今天晚些时候试试。
  • 不幸的是,目标没有帮助 - 在我的浏览器中留下了银行页面!但是我现在认为问题可能出在 Safari 的其他地方(请参阅更新)
  • 如果我省略 HTTP 内容类型,文件将作为文本文件下载。但是错误消息仍然出现在浏览器错误控制台中。
猜你喜欢
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 2015-03-14
  • 2023-03-25
  • 2013-08-08
  • 1970-01-01
  • 2014-07-11
  • 2016-04-24
相关资源
最近更新 更多