当前位置: 首页 > 知识库问答 >
问题:

如何清除服务工作者的缓存?

邢臻
2023-03-14

因此,我有一个带有服务工作者的HTML页面,服务工作者缓存索引。html和我的JS文件。

问题是当我更改JS时,更改不会直接显示在客户端浏览器上。当然,在chrome开发工具中,我可以禁用缓存。但是在Chrome Mobile,我该怎么做呢?

我试图访问站点设置并点击CLEAR%RESET按钮。但它仍然从缓存加载旧页面/加载。我试图使用其他浏览器或铬隐姓埋名,它加载新的页面。

然后,我尝试清除我的浏览数据(只是缓存),它的工作原理。

我想这不是它应该做的对吧?如果不清除chrome浏览器缓存,我的用户将不知道页面是否已更新。

共有3个答案

司寇苗宣
2023-03-14

通常,您会更新Service Worker JS文件中的CACHE_NAME,以便再次安装Worker:

self.addEventListener('install', evt => {
  evt.waitUntil(
    caches.open(CACHE_NAME).then(cache => cache.addAll(inputs))
  )
})

或者,要清除PWA的缓存,请查找缓存名称:

self.caches.keys().then(keys => { keys.forEach(key => console.log(key)) })

然后运行以下操作将其删除:

self.caches.delete('my-site-cache')

然后刷新页面。

如果刷新后在控制台中看到任何与工作人员相关的错误,您可能还需要注销注册的工作人员:

navigator.serviceWorker.getRegistrations()
  .then(registrations => {
    registrations.forEach(registration => {
      registration.unregister()
    }) 
  })
阳航
2023-03-14

使用此选项删除过时的缓存:

self.addEventListener('activate', function(event) {
  event.waitUntil(
    caches.keys().then(function(cacheNames) {
      return Promise.all(
        cacheNames.filter(function(cacheName) {
          // Return true if you want to remove this cache,
          // but remember that caches are shared across
          // the whole origin
        }).map(function(cacheName) {
          return caches.delete(cacheName);
        })
      );
    })
  );
});
胡桐
2023-03-14

如果知道缓存名称,只需调用caches即可。从worker中您喜欢的任何位置删除()

caches.delete(/*name*/);

如果您想擦除所有缓存(而不是等待它们,假设这是一项后台任务),则只需添加以下内容:

caches.keys().then(function(names) {
    for (let name of names)
        caches.delete(name);
});
 类似资料:
  • 常见问题:如何卸载Service Worker?对于使用JavaScript注销服务工作人员有一个很好的答案。如何让服务工作者在注销时清除任何命名缓存? 从MDN,服务工作人员将在注销之前完成任何正在进行的操作。因此,听起来应该可以监听 状态会做什么。 伸手去抓稻草,虽然我看到了卸载标志的引用,但我还没有看到它暴露在任何地方。建议?

  • 我使用带有sw工具箱库的service worker。我的PWA缓存除API查询(图像、css、js、html)之外的所有内容。但是如果有一天某些文件会被更改呢。或者如果服务人员。js将被更改。应用程序应该如何知道文件中的更改? 我的服务人员。js: 我不知道在PWA中更新缓存的常用方法是什么。也许PWA应该在后台发送AJAX请求并检查UI版本?

  • 我正在使用Service Worker创建一个渐进式Web应用程序,我正在使用Service Worker工具箱来缓存我的内容。Service Worker代码来缓存我的内容: 代码运行正常,因为我在控制台上没有看到任何错误。但是我如何检查是否从云前或上面配置的网址的图像正在缓存和从缓存本身渲染。

  • 我有一个基于service worker的离线应用程序,允许用户离线下载pdf文件。 有一个文本文件,其中包含pdf文件的下载路径和特定格式的文件标题(以及css、js和图像路径),应用程序通过ajax读取此文本文件并绘制所有可用pdf文件的列表(通过显示标题和下载链接) 在安装过程中,工作人员读取相同的文件,并将所有pdf文件与文本文件一起放入缓存中,以便这些文件可以离线访问。 当我用一些新的p

  • 我目前正在使用default-service-worker开发一个渐进式web应用程序。 我在发布一个新版本的javascript块时遇到了破坏缓存的问题。 构建时,输出javascript文件使用来确保当JS文件中的内容发生变化时,文件名也会发生变化。在没有服务工作程序的情况下运行时,这会成功地关闭缓存。 但是,当使用service worker时,所有静态资产包括我的文件被缓存。这意味着旧的正

  • 我已经运行了这个脚本 但我看到,通过这样做,我们实际上是先注册服务人员,然后注销它。对我来说,这似乎不是正确的方法。 或者,我可以点击从开发工具应用程序到服务工作者附近的取消注册链接 但当我通过检查时chrome://serviceworker-internals/ 它在列表底部显示旧的和未注册的服务人员列表(见图) 那么为什么我会在这里看到冗余服务人员列表呢?什么时候更新?这是chrome浏览器