2012-01-11 75 views
8

我在网站上设置了应用程序缓存,此后不久就实现了我认识到的更激进的方式。我想删除它。永久。永久删除HTML5 Appcache清单

我读过,通过一个完全空的已更改清单文件,使用正确的MIMETYPE将删除缓存。 编辑:见下文。莫里斯的答案是唯一一致的解决方案。

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

如果您可以指定您是否真的在使用您的答案之前使用了此功能,我真的很感激它 - 在测试期间没有显示的含糊不清的文档和古怪的东西让我陷入了这种情况。

回答

16

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

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

+0

所以其实我是想置,不能删除该属性? – 2012-01-11 12:50:51

+1

首先做到这一点,并对原始清单进行更改,否则页面将不会被下载,并刷新页面。这将打破清单链接,然后您可以完全删除清单属性。 – Maurice 2012-01-11 12:55:42

+0

明白了。非常感谢你的帮助。 – 2012-01-11 13:01:16

2

我一直有一个类似的问题,我需要重置更新失败后的appcache(即强制完全删除appcache,以便它可以从头开始重新构建)。

建立在Maurice的答案我向用户提供一个通常隐藏的链接,它打开一个非缓存页面,它只是写入一个cookie并将用户返回到前一个视图。这个cookie告诉服务器在下一次请求appcache时返回404,然后用户通过正常的登录过程。当应用程序下一次成功运行时,它将清除缓存并像往常一样恢复缓存。

以这种方式使用cookie解决了视图的主版本卡在appcache中,使得难以向manifest =“”中注入中断url的问题,即清单url保持不变,但服务器以404回应,直到另行通知。

+0

有趣。虽然如果您最终希望保留appcache,那么您可以更改清单,这会导致浏览器重新提取所有资产,就像重新开始一样。 为了永久消除舱单,莫里斯是正确的。 – 2013-07-03 13:38:10

+0

我的建议实际上只适用于登录后的应用程序,在这种情况下,使用正常程序(更改清单等)触发成功更新可能会遇到困难。 – notreadbyhumans 2013-07-07 15:09:04

1

如果您只是想从您身边移除,您可以通过浏览器进行操作。我只能记得在Chrome中如何做到这一点。转到chrome:// appcache-internals/&删除所需的文件。你也可以清除缓存& cookies &应该工作。不过,我只在Chrome中测试过。

如果您想要为所有查看者删除它,我知道无法检测它们是否具有旧的缓存版本,但是我知道如Maurice所建议的那样保留该属性为假链接将是唯一方法我会知道的;尽管如此,我相信还有另一种方式,很可能是jQuery。

5

截至2015年6月25日我发现返回404不会清除Firefox的现有appcache,并且返回空白的appcache不会清除Chrome的现有appcache。返回下面的appcache似乎可以在IE,Chrome,Safari和Firefox中使用,但是不清楚index.html的“隐式”缓存被禁用的机制是什么。

NETWORK: 
* 

CACHE: 
FALLBACK: 
+0

这应该被接受为正确答案。感谢分享! – raphael 2017-03-09 11:16:23

+0

缓存*必须*从'CACHE MANIFEST'开始,然后新行符合规范。至于“禁用'隐式'index.html缓存',我知道的唯一解决方案是包含一个隐藏的iframe,并在iframe中声明清单(然后iframe中的页面将被缓存)。我实际上没有尝试过,但我把它看作是一个解决方案。 – Nateowami 2017-05-11 10:04:58