1

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

当它这样做时,它会在网络检查器中给出“状态 403,未修改”消息。在这是一个页面的情况下,它只加载了几个字节,我无法从开发人员菜单中选择“显示源”。当我点击“重新加载”时,页面会立即出现,就好像已经被缓存了一样。这也发生在我清除缓存并且错误出现在我尝试加载的第一页之后。

通常,当我在页面尚未完成加载时单击链接时会发生这种情况。在时间轴中,我看到虽然 url 已经设置为新页面,但 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

4

2 回答 2

0

当服务器返回304 Not Modified状态时,似乎text/plain在 Safari 中指定了错误的 mime-type ( )(请参阅 Web Inspector)。这会阻止图像正确显示。在 Mac 和 Windows 中都会发生(在 Chrome 中似乎没有发生)。我无法重现空白页。

一个可能的解决方案可能是明确定义.htaccess文件中图像的 mime 类型:

# 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");

这可能与这个问题有关:调试消息“资源解释为其他但使用 MIME 类型应用程序/javascript 传输”

于 2012-10-24T09:13:12.890 回答
0

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

我不确定为什么会解决它 - 我没有对任何 .css 或 .js 文件本身进行任何更改。基本上,组合脚本只是将所有文件一起粘贴到一个大的新文件中,并且不会向现有文件添加任何新内容。

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

似乎缓存和 Safari 肯定存在一个奇怪的问题。对于任何来到这里遇到类似问题的人,我建议关闭任何与缓存有关的东西(比如 gzip 和类似的东西),以找出导致问题的原因。

于 2012-10-26T15:27:11.767 回答