PWA中fetch拦截不生效是怎么回事?
我在service worker里写了fetch事件监听,想缓存接口请求,但发现根本没进拦截逻辑,页面请求还是直接走网络。
注册sw没问题,install和activate都能触发,就是fetch事件完全没反应。我试过把scope改成’/’,也检查了sw文件路径,都没问题。代码大概是这样:
self.addEventListener('fetch', (event) => {
console.log('fetch intercepted:', event.request.url);
// 后续缓存逻辑...
});
控制台完全看不到那句log,是不是fetch拦截对XHR或fetch API的请求有啥限制啊?
首先检查你的页面是否在HTTPS环境下运行,service worker要求必须在安全环境中工作,否则fetch事件根本不会触发。
其次要确认你在页面加载时已经正确注册了sw,并且在这个页面的生命周期内一直保持激活状态。有时候页面刷新后sw会被重新安装,导致之前的逻辑失效。
另外记得查看浏览器控制台有没有报错信息,特别是关于sw的状态变化。我遇到过sw因为语法错误或异常而无法正常工作的场景。
最后提醒一下,确保你在监听fetch事件前没有调用event.waitUntil()来延迟activate事件,这可能会干扰fetch事件的处理流程。
给你一个简单的调试代码示例:
如果还是不行,建议逐步简化代码排查问题,很多时候就是某个小细节没注意到。说实话我自己也被这些诡异问题坑过不少次。