PWA 更新时用户怎么才能立刻用上新版本?
我做了一个 PWA 应用,上线后发现用户经常卡在旧版本,即使我更新了 service worker 也没用。试过在 register 之后手动调 registration.update(),但好像还是得等用户关掉所有标签页再打开才行?
网上说可以用 skipWaiting + clientsClaim 来让新 SW 立刻接管页面,但我加了之后页面内容还是旧的,除非手动刷新。有没有办法让用户一打开就自动用最新版,不用他们自己去刷新?
我现在 service worker 里是这样写的:
self.addEventListener('install', (event) => {
self.skipWaiting();
});
self.addEventListener('activate', (event) => {
event.waitUntil(self.clients.claim());
});
前端注册逻辑也加了 update 检查,但体验还是很差,求真实可行的方案!
我建议你在前端注册 SW 时加个监听器,当检测到新的 SW 激活时,主动提示用户刷新或者直接刷新页面:
这样更清晰地处理了新版本激活后的刷新逻辑。别忘了在你的 HTML 中加
<meta http-equiv="Cache-Control" content="no-store">来防止浏览器缓存过期文件。记得测试下不同情况下的表现,尤其是多标签页打开的情况。说实话这玩意调试起来还挺麻烦的,但这个方案应该能解决大部分问题。