问题描述
一个基于 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)中链接此文件的脚本标记。这应该可以解决问题。