HTML5离线缓存编程式过期

7
我有一个使用离线缓存的HTML5应用程序,并且使用了一个清单文件。触发缓存更新的唯一方式是在服务器上更改清单文件。我正在寻找一种编程方式来使缓存过期并强制更新。
我查看了规范,寻找window.applicationCache上的某些方法来使缓存过期。但是没有找到任何方法。有一个update()方法,但仅在缓存过期时更新(即清单文件中有更改)。所以这并没有帮助。
有人知道一种编程方式来使应用程序缓存过期并强制下载吗?

服务器端编程的方式是为旧清单文件提供404响应。您应该使用包含版本字符串的清单文件名,以便可以过期旧版本的清单。 - user229044
2个回答

2
据我所知,manifest是启动更新的唯一手段。HTML5 Rocks网站上有一篇文章,介绍了在监听appCache.status中的UPDATEREADY状态后立即调用applicationCache.swapCache()以编程方式更新缓存(在manifest更新之后)的方法。

我不确定这是否足够,但这是一篇不错的文章(向下滚动到“更新缓存”) - http://www.html5rocks.com/tutorials/appcache/beginner/


2

确实,只有"已更新"的清单文件才会触发更新。但是某些浏览器(如FF、Chrome)不会检查清单文件引用的所有文件。例如,JPG文件将不会测试服务器是否有更新的文件。似乎浏览器的一般缓存策略影响了更新过程。要强制浏览器检查缓存清单中的所有或某些文件,您需要在HTTP标头中使用“Cache-Control: no-cache”来标记这些文件。

您可以通过使用cookies来控制更新操作。如果您有一个服务器端脚本来解释cookie命令,您可以通过JavaScript强制浏览器使缓存内容过时。 例如,如果客户端执行cache.update()并设置了一个名为“cache_clear”的cookie,则服务器可以用404响应代码回答,从而导致浏览器过时应用程序缓存内容。


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