如何通过编程清除Service Worker缓存?

4

我有一个使用多个缓存的服务工作者站点,这些缓存包含用于不同目的的文件。我希望能够按需从我的程序中清除(或删除)特定的一个缓存,而不是在服务工作者内部进行操作。以下是我的尝试:

async function clearCache(cacheName) {
  if ('caches' in window) {
    return await caches.delete(cacheName);
  } 
}

我可以从窗口对象获取缓存,但无法删除它。我也尝试循环遍历缓存并逐个删除所有文件,但这也没有起作用。

这是否可行?

2个回答

3

是的,那段代码应该会删除缓存。(你可以简化它一点,省略async/await,因为代码已经返回了一个promise,但这并不重要。)

如果你没有立即看到缓存消失,那么可能是作用域中有另一个变量引用了打开的缓存实例。根据规范

注意:在此步骤之后,现有的DOM对象(即当前引用的Cache、Request和Response对象)应保持可用状态。

实际上,这意味着如果你在某个地方的作用域中有一个打开的cacheName实例,删除操作将在关闭或离开作用域之后才会发生。


1

这对我来说是清理程序缓存的有效方法。

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

这些代码应该添加到哪个文件中? - Poonkodi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接