gpt4 book ai didi

javascript - HTML5 - ApplicationCache 不更新(仅)某些文件

转载 作者:行者123 更新时间:2023-11-28 04:26:53 25 4
gpt4 key购买 nike

我有一个使用 AppCache 将资源存储在浏览器缓存中的应用程序。我已经能够在 PHP 文件上设置 list ,以便自动写入所有必须缓存(正确过滤)的文件。该文件的 header 如下:

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">

每次更新 list 时,应用程序都会检测到更新,并正确触发事件,更新缓存并刷新页面,以便重新加载它们。

但是,某些文件(主要是 Javascript 和 CSS 文件)无法正确刷新。有时需要几次 list 更新(整个过程),有时只需要一次,有时需要永远,我必须删除浏览器缓存或进入隐身模式 .

应用检测到更新,因此 list 不会被捕获并且会正确更新。问题是,即使再次下载文件,它们仍然以旧版本提供。主要问题是,这只发生在某些文件中(有时它们是一些 css 文件,有时它们是 js 等等:文件未更新是随机的)。

实际上,我使用的是 Chrome v59,在使用 Chrome v60 的 Android 设备上也会出现同样的情况。

有什么解释可以解释为什么它们不能正确刷新吗?这是一个已知的错误?我能做些什么来解决这个问题吗?

更新

当我在很短的时间内完成一些更新时,这种情况似乎发生得最多。等待24小时左右,第一次尝试就可以了。也许这可以帮助您猜测为什么会发生。

谢谢。

最佳答案

您的 list 文件可能被缓存,您可以设置过期 header 使其立即过期

我建议添加 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();
}
});
}
}

其他,要强制下载任何新的(或更改的)文件,您必须 更新 list 文件(看起来你正在这样做)。

最常见的问题是您可能没有使用正确的 MIME 类型(文本/缓存 list )来提供 list 。

您可能会遇到错误,检查错误的最简单方法是在 Chrome 中打开页面,然后在控制台和 AppCache 下的资源选项卡中查看是否存在错误(它会提示正在提供文件)错误。您还可以使用curl -I命令测试它:

curl -I $manifest_file_URL  

关于javascript - HTML5 - ApplicationCache 不更新(仅)某些文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44974767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com