Chrome(15.0.874.106)的一切都很好用,但在Firefox(7.0.1)和Opera(11.52)上无效。
这是我的缓存清单文件cache.manifest.PHP(我已经减少到最低限度):
<?PHP header("Cache-Control: max-age=0,no-cache,no-store,must-revalidate"); header("Pragma: no-cache"); header("Expires: Wed,11 Jan 1984 05:00:00 GMT"); header('Content-type: text/cache-manifest'); ?>CACHE MANIFEST CACHE: /app/common/css/reset.css /favicon.ico
而这是“主”HTML文档的前4行:
<!DOCTYPE html> <html manifest="/app/mobile/cache.manifest.PHP"> <head> <title>MyApp Mobile</title>
当我尝试将缓存清单(http://www.myapp.com/app/mobile/cache.manifest.PHP)加载到浏览器中时,文件显示正确,但是当我尝试加载页面一次离线后,我得到“无法连接”错误页面。再次,这只是在Firefox和Opera上发生。
Firebug说“离线缓存中有0项”,我没有找到在DragonFly上检查应用程序缓存的方法。
我很生气,我不知道如何在Firefox和Opera上有效地调试问题。
请帮忙。
谢谢,
担
解决方法
更糟糕的是,浏览器不会重新加载清单文件,除非文本内容更改。所以你可以调整你的服务器头或一些东西来修复它,但是除非cache.manifest.PHP的内容改变了,否则浏览器将会盲目忽略它,并且完全按照上一次做的。所以它可能已被破坏,那么你修复它,但浏览器忽略这些更改,因为cache.manifest.PHP的文本内容没有改变。这甚至似乎免除了清除浏览器缓存,这是使其如此混乱的一部分 – 应用程序缓存真的非常严重,关于缓存。
为了解决这个问题,评论中的文字更改计数,所以在顶部有一个版本或时间戳或日期(例如#版本1.2)的评论,并且当您希望浏览器“注意”时进行更改。
那么浏览器仍然不会立即使用它!应用程序缓存的工作方式是下次加载页面时,它将再次完成上次的操作,并开始在后台检查更新。所以你可能想要控制台,等待像“更新…”然后“完成”的东西,然后点击刷新,浏览器将终于开始使用新版本。最后!
总而言之,它可以是一个正确的痛苦去工作。但是,一旦它工作,它几乎是防弹的:你几乎可以放心,缓存清单中列出的任何东西只能每个用户一次下载一次,直到您更改文件的文本内容。
浏览器标准的合规性是相当不错的,所以我最好的猜测是你实际上是有效的,但是你最后检查了Chrome,它是唯一正确缓存清单文件的浏览器。在开发过程中,您可能已经损坏了,但Firefox和Opera正在将其旧的清单文件夹在死亡之中。我敢打赌你也尝试清除浏览器缓存在Firefox和Opera,这可能什么也不做 – 你需要更改文件的文本内容和双重刷新之前,Firefox和Opera将最终放弃其破坏的版本的清单文件,开始使用您可能上传到旧版的工作。