【问题标题】:How to really clear cache in PWA如何真正清除 PWA 中的缓存
【发布时间】:2020-06-12 17:38:49
【问题描述】:

我正在尝试调试有关 PWA 的问题。 我使用谷歌浏览器每天运行 web 应用程序并调试这个问题(台式机和平板电脑)。

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

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

以下是 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 和缓存名称时清除缓存和所有文件?

【问题讨论】:

    标签: javascript progressive-web-apps service-worker


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复。我尝试了上面的代码,但没有任何变化。缓存总是被删除,但重新安装时似乎还缓存了一些文件。
    猜你喜欢
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2014-03-10
    • 2012-02-24
    • 2012-01-31
    • 2017-02-20
    • 2019-09-18
    • 2022-01-22
    相关资源
    最近更新 更多