移除HTML5应用缓存清单,永久删除

12

我在一个网站上设置了应用程序缓存,很快意识到它比我意识到的更具侵略性。我想永久删除它。

我读到过用正确的MIMETYPE传递一个完全空的修改后清单文件将删除缓存。 编辑:请参见下面。 Maurice的答案是唯一一致的解决方法。

这是最快、最有效的解决方案吗?有更好的方法吗?

如果您能在回答中指定您是否实际使用过此功能,我将非常感激—模糊的文档和在测试期间没有显示的怪癖是使我陷入这种情况的原因。

4个回答

19

关键在于首先将HTML页面中的清单URL更改为无效值,以便浏览器加载时收到404错误。确保还要更改原始清单,否则新的HTML页面将永远不会被下载。在浏览器无法下载新的清单URL后,您可以完全从HTML页面中删除清单设置。

有点古怪,但这似乎是唯一可靠的删除现有清单引用的方法。


那我实际上想要设置 <html manifest="junk-404-link">,而不是删除这个属性? - Jason Goldstein
1
首先,执行此操作并更改原始清单,否则页面将无法下载,请刷新页面。这将会破坏清单链接,之后您可以完全删除清单属性。 - Maurice
@Maurice 需要更改清单URL吗?还是原始清单URL只需返回404即可? - Svish
只需从原始URL返回404即可。 - Maurice

9
截至2015年6月25日,我发现返回404将无法清除Firefox的现有appcache,而返回空白的appcache也无法清除Chrome的现有appcache。 返回以下appcache似乎在IE,Chrome,Safari和Firefox中都有效,尽管目前不清楚禁用index.html的“隐式”缓存是通过什么机制实现的。
NETWORK:
*

CACHE:
FALLBACK:

这应该被接受为正确答案。感谢分享! - raphael
1
缓存必须以CACHE MANIFEST开头,后面跟一个新行以符合规范。至于“禁用 index.html 的‘隐式’缓存”,我知道的唯一解决方案是包含一个隐藏的 iframe 并在 iframe 中声明 manifest(然后 iframe 中的页面将被缓存)。我实际上还没有尝试过这个解决方案,但我读到过它作为一种解决方案。 - Nateowami

4
如果您只想从浏览器中删除它,可以在Chrome浏览器中进行操作。前往chrome://appcache-internals/ 并移除所需的文件。您也可以清除缓存和Cookies。不过,我只测试过Chrome。
如果您想要将其从所有查看者处删除,我不知道如何检测是否有旧的缓存版本,但我知道保留具有错误链接的属性,就像Maurice建议的那样,这是我唯一知道的方法;不过,我相信还有其他方法,最可能是使用jQuery。

唯一解决我的问题的方法!谢谢! - Fernando Kosh

2
我遇到了类似的问题,需要在更新失败后重置应用缓存(即强制完全删除应用缓存,以便可以从头重新构建)。
在Maurice的回答基础上,我向用户展示一个通常隐藏的链接,打开一个非缓存页面,其中只编写了一个cookie,并将用户返回到之前的视图。这个cookie告诉服务器,在下次请求应用程序缓存时返回404,然后用户会通过正常的登录流程。当应用程序下次成功运行时,它清除cookie并像往常一样进行缓存。
以这种方式使用cookie可以解决主视图版本被卡在应用缓存中的问题,使得注入破坏url到manifest = ""变得困难,即manifest url保持不变,但服务器在被告知之前响应404。

有趣。虽然如果您最终想要保留appcache,您可以只更改清单,这将导致浏览器重新获取所有资产,就像重新开始一样。要永久删除清单,Maurice是正确的。 - Jason Goldstein
我的建议仅适用于登录后的应用程序,在这种情况下,您可能会在使用常规程序(更改清单等)触发成功更新时遇到困难。 - notreadbyhumans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接