OSX Safari帧加载中断



我有一个基本的HTML网站(与一些javascript)使用一个简单的锚标记下载文件,像这样:

<a href="../resources/mexml/MexmlSamples-1.0.zip">Mexml Samples 1.0</a>

为了跟踪下载数量,我有一个onclick处理程序,将事件传递给Google分析,如下所示:

$('#mybutton').click(function(e){ga('send','event','Download','MexmlSample','MexmlSample-1.0');});

在使用Chrome (OS X)和IE (Windows 7)下载文件时,这可以正常工作。文件下载后,我在GA帐户中看到该事件。

当我在Yosemite上的Safari 8中测试它时,文件确实下载了,但GA很少看到该事件。当然,我在Safari错误控制台中得到可怕的Failed to load resource: Frame load interrupted

我假设我有时会得到GA事件,因为在Safari中断操作和GA代码触发之间存在竞争条件。

所以可以做些什么来修复这个在Safari,让我总是得到GA事件?

请注意,我的问题可能与这个未回答的问题有相同的根本原因:下载excel文件时帧加载中断

六月六日更新

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

如果我关闭那个窗口,然后打开一个新的窗口,那么GA再次记录第一次下载。

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

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

但是这是由Chrome运行的相同代码,所以我不知道在哪里甚至如何开始调试问题。

如果您总是想获得ga事件,那么hitCallback可能是唯一的方法,直到Safari的任何错误都被修复。我使用类似的模式从一个应用程序的页面发送一个GA事件,这只是一个重定向后,整个负载的数据库的东西已经在rails中执行。将javascript重定向添加到回调中没有明显的延迟。然而,我不知道如何启动从javascript下载我的头。

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

我不知道在这个例子中是否需要使用setTimeout() for pattern

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

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

最新更新