javascript - 如何真正清除 PWA 中的缓存

标签 javascript progressive-web-apps service-worker

我正在尝试调试有关 PWA 的问题。 我使用 Google Chrome 每天运行网络应用程序并调试此问题(台式机和平板电脑)。

当我编辑service-worker.js(更改缓存存储名称以获取更新)时,Web应用程序不会重新加载从服务器获取它们的所有文件,但其中的一部分始终会被缓存,即使在Cache Storage 缓存的名称(只有1个,所以没有多个缓存)是正确的。 如果我使用不同的设备(Mac 和 Android 平板电脑),也会出现同样的情况,所以我相信不是特定设备的浏览器问题。奇怪的是,如果我在重新加载页面时使用“清除站点数据”按钮清空缓存、cookies、indexeddb 等,则 service-worker.js 会安装缓存(具有更新的名称),但如果我进入内部在我清除缓存和站点数据之前,详细 View 中有一些“缓存时间”太旧的文件。

例如,在下图中您可以看到某些文件的不同时间。假设我在 2020 年 12 月 6 日 19:17:50 使用了“清除网站数据”按钮。

enter image description here

以下是 service-worker.js 中包含“activate”事件的部分以及带有缓存名称的 const。

const name_of_cache = ['cache_v1'];
self.addEventListener('activate', event => {
console.log('Service worker activate event!');
event.waitUntil(
caches.keys().then((cacheNames) => {
  return Promise.all(
    cacheNames.map((cacheKeyName) => {
      if(name_of_cache.indexOf(cacheKeyName) === -1) {
        return caches.delete(cacheKeyName);
      }
    }
  ));
})
);
});

我哪里做错了?如何解决这个问题,每次更改 service-worker.js 和缓存名称时清除缓存和所有文件?

最佳答案

这个答案基于这个要点:https://gist.github.com/deanhume/4b7e1f136cbee288cff9f0fc46318fbb

if ('serviceWorker' in navigator) {
  caches.keys().then(function(cacheNames) {
    cacheNames.forEach(function(cacheName) {
      caches.delete(cacheName);
    });
  });
}

这将循环遍历您拥有的每个缓存并将其删除。

关于javascript - 如何真正清除 PWA 中的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62349598/

相关文章:

javascript - 向 css 添加绝对路径会导致 Gecko Engine 无法呈现页面

javascript - jQuery 选择 data-href

reactjs - 使用服务器端渲染在 React PWA 中缓存应用程序 shell

ios - 尽管遵循以下说明,PWA iOS Splash 仍未显示

javascript - 存储在 Service Worker 中的变量的生命周期是多少?

javascript - 按客户端过滤网络通知

javascript - MongoDB - Mongoose 查询 findOneAndUpdate() 不会更新/复制数据库

javascript - 下拉导航/排序 dd 与按钮对齐

vue.js - 如何在 Play 商店中通过我的 PWA 货币化(使用 TWA)

javascript - 我的情况使用什么缓存技术?