Safari停止加载

时间:2012-10-23 21:19:40

标签: javascript safari

我正在处理的网站似乎随机停止加载页面(仅显示白页)和图像(仅显示蓝色问号,但占位符已在正确的维度中)。

当它这样做时,它会在Web检查器中显示“状态403,未修改”消息。如果这是一个页面,它只加载了几个字节,我不能从开发人员菜单中选择“show source”。当我点击“重新加载”时,页面立刻就在那里,好像已经缓存了一样。这也发生在我清除缓存之后,错误在我尝试加载的第一页上显示出来。

通常,当我在页面尚未完成加载时点击链接时会发生这种情况。在时间轴中,我看到虽然网址已经设置为新页面,但Safari仍在从旧页面加载各种内容,并且在最终尝试加载新页面时会出现类似的情况。

如果图像显示不正确,则表示它们已加载(“资源”概述中未显示任何错误)。此外,重新加载后,一切都在那里。

我搜索了很多内容,似乎很多人已经使用Safari并且图像没有完全加载或者页面只显示为空白页面。尽管如此,这些问题和投诉中提到的网站在我的Safari上显示得很好(Ebay被提到了很多,以及谷歌图片)。

我尝试了很多不同的东西,比如预加载,延迟加载(在显示图像时将src设置为data-src),重新加载(在显示图像后将src设置为自身)。此外,当我在Safari开发人员菜单中转换缓存时,它似乎没有任何区别。我没有尝试在Apple论坛上提供的任何DNS解决方案,因为我想在代码端解决这个问题。

当你看到我的js时,你会看到有一些调整大小和延迟加载。即使我关掉所有这些东西,问题仍然存在。我意识到图像很重(几乎所有图像都超过500kb) - 我仍然希望无论图像大小如何都会有解决方案,因为内容不是我将来可以完全控制的内容。

页面: http://www.alique.nl/archive 您必须单击缩略图并浏览图像才能看到错误。由于它发生在随机页面上(至少看似),我无法指向更具体的页面。

这是js文件: http://www.alique.nl/js/lib.js

2 个答案:

答案 0 :(得分:0)

当服务器返回304 Not Modified状态时,似乎在Safari中指定了错误的mime-type(text/plain)(请参阅Web Inspector)。这可以防止图像正确显示。适用于Mac和Windows(在Chrome中似乎不会发生)。我虽然无法复制空白页。

一种可能的解决方案可能是在.htaccess文件中为图像明确定义mime-types:

# Force correct mime-types
AddType image/gif .gif .GIF 
AddType image/jpeg .jpeg .jpg .jpe .JPG 

可以在http://www.htaccess-guide.com/adding-mime-types/找到完整的mime类型列表。但是,这可能不起作用,因为这可能是Safari中的一个错误,因为原始内容是使用正确的mime类型提供的。

一种解决方法,但相当不起眼的解决方案,是在.htaccess再次禁用缓存:

# Disable caching of resources in user-agent:
FileETag None
<ifModule mod_headers.c>
  Header unset ETag
  Header unset Last-Modified
  Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
  Header set Pragma "no-cache"
  Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>

或者在PHP中:

// Disable caching of resources in user-agent:
header('ETag: ' . md5(time()) ); 
header("Expires: Wed, 11 Jan 1984 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

这可能与此问题有关:Debug message "Resource interpreted as other but transferred with MIME type application/javascript"

答案 1 :(得分:0)

我通过删除用于组合所有.css和.js文件的组合脚本解决了这个问题: http://rakaz.nl/projects/combine/combine.phps

我不确定为什么这会解决它 - 我没有改变任何.css或.js文件本身。基本上,组合脚本只是将所有文件放在一个大的新文件中,并且不会在现有文件中添加任何新内容。

对我来说,错误发生得如此随机也没有意义:不是每次安装Safari,也不总是在相同的页面上或使用相同的图片。关闭.htaccess中的缓存确实改变了一些东西(它使它可以在更多的计算机上工作,但不是在所有的计算机上),但影响了之前没有遇到麻烦的其他图像(如徽标,它不会加载随机页面。)

似乎有一个奇怪的问题,缓存&amp;苹果浏览器。对于那些带着类似问题来到这里的人,我建议关掉任何与缓存有关的东西(也就是gzip和类似的东西)来找出导致问题的原因。