Service Worker 注册后为什么刷新页面还是没生效?
我按照教程注册了 Service Worker,控制台也没报错,但刷新页面后离线功能完全没起作用,缓存也没打上。是不是注册时机有问题?
我的注册代码是这样写的:
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js')
.then(reg => console.log('SW registered:', reg))
.catch(err => console.log('SW failed:', err));
});
}
而且 sw.js 文件确实能通过浏览器直接访问到,路径应该没错。到底哪里漏了?
sw.js文件里确实定义了缓存策略。推荐的做法是确保在
sw.js里有以下基础结构:另外一个小细节是,有时候浏览器可能保留了旧的服务工作者版本。记得在开发者工具的应用面板里检查是否有旧的 SW 在运行,必要时可以点“更新”按钮强制更新。
最后提醒下,Service Worker 的作用范围和路径相关。如果你的应用在深层路径加载,而 sw.js 注册在根目录,可能会导致缓存策略没生效。尝试把注册代码移到更早执行的地方,比如直接放在
<head>里的同步脚本中。开发过程中这些小坑挺常见的,慢慢来就好。