Javascript HTML5-ApplicationCache不更新(仅)某些文件
我有一个应用程序正在使用AppCache将资源存储在浏览器的缓存中。我已经能够在PHP文件上设置清单,以便自动写入所有必须缓存(正确过滤)的文件。此文件的标题如下所示:Javascript HTML5-ApplicationCache不更新(仅)某些文件,javascript,html,caching,cache-manifest,application-cache,Javascript,Html,Caching,Cache Manifest,Application Cache,我有一个应用程序正在使用AppCache将资源存储在浏览器的缓存中。我已经能够在PHP文件上设置清单,以便自动写入所有必须缓存(正确过滤)的文件。此文件的标题如下所示: header('Content-Type: text/cache-manifest'); header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=
header('Content-Type: text/cache-manifest');
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
它名为appcache.php
,在我的HTML中被正确引用:
<html manifest="appcache.php">
每次我更新清单时,应用程序都会检测到更新并正确触发事件,更新缓存并刷新页面,以便重新加载
但是,一些文件(主要是Javascript和CSS文件)没有正确刷新。有时需要几次清单更新(整个过程),有时只需要一次,有时需要永远,我必须删除浏览器缓存或进入匿名模式
应用程序检测到更新,因此清单没有被捕获,并且得到了正确更新。问题是,即使文件再次下载,它们仍然以较旧的版本提供。主要问题是,这只发生在一些文件中(有时是css文件,有时是js文件,等等:未更新的文件是随机的
事实上,我使用的是ChromeV59,在我的Android设备上使用ChromeV60也是一样
有没有解释为什么它们不能正确刷新?这是已知的bug吗?有什么我能解决的吗
更新
当我在短时间内完成了一些更新时,这种情况似乎发生得最多。在等待24小时左右后,它在第一次尝试时工作。也许这能帮你猜出为什么会这样
谢谢。您的清单文件可能正在缓存,您可以将其expires头设置为立即过期 我建议添加swapCache方法
$(function() {
if (window.applicationCache) {
applicationCache.addEventListener('updateready', function() {
if (window.applicationCache.status ==
window.applicationCache.UPDATEREADY) {
window.applicationCache.swapCache();
console.log("appcache updated");
window.location.reload();
}
});
}
}
另外,要强制下载任何新的(或更改的)文件,您必须
更新清单文件(看起来您正在这样做)
最常见的一种情况是,您可能没有为清单提供正确的mime类型(文本/缓存清单)
您可能会遇到错误,检查错误的最简单方法是在Chrome中打开页面,查看控制台和AppCache下的resources选项卡,查看是否存在错误(它会抱怨文件提供不正确。您还可以使用curl-I命令对其进行测试:
curl -I $manifest_file_URL
您的清单文件可能正在缓存,您可以将其expires头设置为立即过期 我建议添加swapCache方法
$(function() {
if (window.applicationCache) {
applicationCache.addEventListener('updateready', function() {
if (window.applicationCache.status ==
window.applicationCache.UPDATEREADY) {
window.applicationCache.swapCache();
console.log("appcache updated");
window.location.reload();
}
});
}
}
另外,要强制下载任何新的(或更改的)文件,您必须
更新清单文件(看起来您正在这样做)
最常见的一种情况是,您可能没有为清单提供正确的mime类型(文本/缓存清单)
您可能会遇到错误,检查错误的最简单方法是在Chrome中打开页面,查看控制台和AppCache下的resources选项卡,查看是否存在错误(它会抱怨文件提供不正确。您还可以使用curl-I命令对其进行测试:
curl -I $manifest_file_URL
它正确地完成了整个过程,并且清单得到了更新(或者不会触发事件)。没有错误,也没有。而且它没有被捕获,因为应用程序检测到它已经更改。问题是一些文件刷新,而其他文件(主要是js和css)没有。它正确地完成了整个过程,清单得到了更新(或者不会触发事件)。也没有错误。而且不会被捕获,因为应用程序检测到它已更改。问题是一些文件刷新,而其他文件(主要是js和css)刷新不要。你有没有找到解决这个问题的方法?恐怕我不能……我希望他们现在已经解决了,或者至少改进了,也许是和服务人员一起解决的(自从上次我使用离线缓存以来,已经有很多了).你找到解决方案了吗?恐怕我找不到…我希望他们现在已经解决了,或者至少改进了,也许是与服务人员一起解决的(自从上次我使用脱机缓存以来,这已经很多了)。