Service Worker文件如何更新?
2025-04-19
2
参考资料
文件更新触发条件
浏览器检测到Service Worker文件(
sw.js
)的字节级变化(即使内容不同但字节相同不会触发)。更新流程
下载新文件:浏览器在后台下载新Service Worker文件。
安装阶段:触发
install
事件,新旧Worker共存。等待阶段:新Worker处于
waiting
状态,直到旧Worker控制的页面全部关闭。激活阶段:触发
activate
事件,新Worker接管控制。强制立即更新方法
if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js').then(reg => { reg.update(); }); }
跳过等待阶段
在install
事件中调用self.skipWaiting()
:self.addEventListener('install', () => { self.skipWaiting(); });
清理旧缓存
在activate
事件中清理旧缓存:self.addEventListener('activate', event => { event.waitUntil( caches.keys().then(keys => { return Promise.all(keys.map(key => { if (key !== CURRENT_CACHE) { return caches.delete(key); } })); }) ); });
客户端刷新控制
通过postMessage
通知客户端刷新:self.addEventListener('activate', event => { self.clients.matchAll().then(clients => { clients.forEach(client => client.postMessage('sw-updated')); }); });
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。