从 React 切换到 Next.js 后,由于 Service Worker 的缓存,网站没有刷新如何强制更新?

问题描述

一个基于 react 的网站有一个用于缓存的 service worker。我们使用 unregister() 代码运行该网站,并将该网站移植到 Next.js 。尽管在某些机器上,注销代码从未运行过,所以现在这些机器正在运行旧的 React 代码,并且没有反映所做的任何更改并推送到服务器。更改正在隐身和其他运行注销代码的机器上运行。它在 Caddy 服务器上。

如何强制它从服务器端刷新?我们可以在我们的机器上清除缓存或取消注册 Service Worker,但我们不知道有多少客户端拥有旧代码

谢谢!

解决方法

这样问题就解决了。制作了一个新的 Service Worker 文件,仅包含删除 Service Worker 的代码。

if ("serviceWorker" in navigator) {
  window.addEventListener("load",function () {
    navigator.serviceWorker.getRegistrations().then((registrations) 
=> {
      for (let registration of registrations) {
       registration.unregister().then((bool) => {
          console.log("unregister: ",bool);
        });
     }
    });
  });
}

并将此文件放在保存前一个 service worker 的确切位置(您可以从 chrome 开发人员工具中找到)。还包括在 index.html 或 _document.js(对于 next.js)中链接此文件的脚本标记。这应该可以解决问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...