如何以编程方式清除服务工作缓存?

时间:2018-03-01 23:56:55

标签: javascript service-worker

我有一个带有多个缓存的服务工作者的站点,这些缓存有不同原因使用的文件。我可以根据需要从我的程序中清除(或删除)一个特定的缓存,而不是从服务工作者本身清除(或删除)。这就是我尝试过的:

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

我可以从窗口对象获取缓存,但似乎无法删除它。我也试过循环缓存并单独删除所有文件,但这也不起作用。

这可能吗?

1 个答案:

答案 0 :(得分:2)

是的,该代码应该删除缓存。 (您可以通过省略async/await来简化它,因为代码已经返回了一个承诺,但这并不重要。)

如果您没有立即看到缓存消失,那么可能的是,范围中的另一个变量是维护对缓存的打开实例的引用。根据{{​​3}}:

  

注意:在此步骤之后,现有的DOM对象(即当前引用的Cache,Request和Response对象)应保持正常运行。

在实践中,这意味着如果您在某个地方有一个cacheName的开放实例,则删除不会发生,直到它关闭或超出范围。