看来,一旦您有明显的条目,la:

<html manifest="cache.manifest">

然后,该页面(高速缓存中的主条目)将始终被缓存(至少由Safari),直到用户执行某些操作来删除缓存,即使您稍后您从HTML标签中删除了清单属性并更新清单(通过更改(通过更改)其中的某些内容),迫使主条目与其他所有内容一起重新加载。

换句话说,如果您有:

  • index.html(明显定义)
  • file1.js(清单中引用)
  • file2.js(清单中引用)
  • cache.manifest(列出两个JS文件)

- 从index.html中删除清单条目并修改清单(以便它被浏览器和所有内容重新加载)不会阻止此页面的行为,就像它仍然完全缓存一样。如果您在index.html上查看源,您将不会再看到列出的清单,但是浏览器仍将仅请求cache.manifest文件,除非更改该文件的内容,否则任何文件的其他更改都不会显示给该文件。用户。

这似乎是一个非常明显的错误,并且在iOS以及Safari的Mac版本上都存在。是否有人找到了一种不需要用户干预的无需用户干预而重置页面并摆脱缓存的方法?

有帮助吗?

解决方案

我一直在研究同样的问题,并且似乎并不是:

  1. 动态触发页面被缓存
  2. 动态导致页面停止缓存。

这是我发现的最好的资源:

http://www.html5rocks.com/tutorials/appcache/beginner/

http://www.thecssninja.com/javascript/how-to-to-create-indline-webapps-on-the-iphone

特别是,该报价从第一个链接:

如果清单文件或其中指定的资源无法下载,则整个更新失败。如果发生故障,浏览器将继续使用旧的应用程序缓存。

否则,没有任何关于卸载缓存的信息。

似乎暗示您不能强迫错误以使其不死。但是,如下所述,规格表明,如果下载清单文件时发生错误,则将删除整个缓存。

在Google Chrome中,用户可以转到以下URL:

chrome:// appcache-internals/

并手动禁用缓存。当然,下次他们访问页面时,如果页面具有清单属性集,它将被重新进行。

如果您查看规范:5.6离线Web应用程序

似乎暗示了删除缓存的情况。具体而言,第5.6.4.5节:

如果获取清单因404或410响应或等效性而失败,则将这些取代运行:Mark Cache组作为过时。除了处理缓存组中已经与应用程序缓存相关联的文档对象外,该缓存组不再存在于任何目的。如果缓存组具有一个应用程序缓存,其完整性标志不完整,请丢弃该应用程序缓存。

然后说:

如果这是一个缓存的尝试,请完全丢弃缓存组。

基本上,如果对缓存的请求显示文件导致404,则应丢弃整个缓存。因此,当请求缓存清单文件时,您是否尝试让服务器返回404或410?那应该起作用。诀窍是仅返回要从中删除清单的页面的404 /410(也许使用URL参数?)。

其他提示

一种可能的解决方案:

  • 修改清单(因此重新加载)
  • 修改主文件(index.html)以引用不存在的清单,因此获得404

几乎不优雅,但似乎可以用。然后,主要的问题是,您会陷入这个404生成的虚假清单条目,直到所有去过您网站的人都返回并清除了缓存。

必须有更好的方法...

尝试简单地删除清单文件。来自Mozzila文档:

应用缓存也可以过时。如果清单从服务器中删除,则浏览器将删除使用表现出的所有应用程序缓存,然后将“闭合”事件发送到应用程序缓存对象。然后,应用程序缓存的状态将其设置为过时。

这也对我在Chrome上也有用。

一个解决方案,如果您使用的是IIS 7,则是删除用于启用缓存的.manifest或.AppCache文件类型的MIME类型。当您想再次启用缓存时,您可以随时添加它。这就是我为解决我的工作所做的。

我们要做的是删除清单中的文件列表,因此它突出的内容不会被缓存。

它对我们有用。

这可能是古老的,但希望仍然对某人有所帮助。

查看IIS属性中的HTTP标头。看看启用或禁用内容到期。可能是IIS仍在进行缓存。

出于发展目的 (不断变化),我们所做的是:

  1. 例如,在您的服务器端语言下设置-Cache清单文件 - 我们使用PHP,因此我们的开发缓存称为“ Cache.manifest.php”,并且在HTML标签中以此为指向:

    <html manifest="cache.manifest.php">
    
  2. 将一些依赖的字符串(或其他适合您的字符串)作为注释(#---),以使文件偶尔有时不同(浏览器似乎比较清单的内容,而不是日期),例如,此字符串每分钟都会更改清单,这样,如果访问时间与最后一次访问在不同的分钟内,所有文件都将重新播放。

    <?php if($dev) echo date("Y-m-d H:m"); ?>
    

我们刚刚使用Chrome测试了此过程,希望它能在其他方面起作用,但是如果您的评论和建议不是很好,那么将不太感谢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top