PWA中fetch拦截不生效是怎么回事?

Good“雨婷 阅读 32

我在写一个PWA应用,想用Service Worker拦截网络请求做缓存,但发现fetch事件根本没触发。注册了SW也成功了,但页面请求还是直接走网络,没进self.addEventListener(‘fetch’)的回调里。

是不是我哪里配置错了?下面是我的service worker注册代码:

<script>
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));
  });
}
</script>
我来解答 赞 12 收藏
二维码
手机扫码查看
1 条解答
胜捷酱~
问题很可能是SW文件被浏览器缓存了,或者activate后没立即获取控制权。

在sw.js里加上这两行:

self.addEventListener('install', () => self.skipWaiting());
self.addEventListener('activate', () => self.clients.claim());


注册时也加个参数禁止缓存:

navigator.serviceWorker.register('/sw.js', {updateViaCache: 'none'})


改完记得在浏览器里把旧的SW unregister一下,再刷新页面测试。
点赞 1
2026-03-10 18:38