如何在Service Worker中忽略特定端点以实现准确的在线状态检测?
如何让Service Worker忽略特定的网络检测请求端点
当然可以实现。你只需要在Service Worker的fetch事件监听逻辑里,给特定请求路径加个判断,让它跳过拦截逻辑,直接走真实的网络请求就行。
具体实现代码
在你的Service Worker脚本里添加以下逻辑:
self.addEventListener('fetch', (event) => { // 匹配你用来检测网络的特定端点 if (event.request.url.includes('/test.test')) { // 直接放行,不经过Service Worker拦截处理 return; } // 这里保留你原本的Service Worker缓存/拦截逻辑 // ... 你的其他离线缓存等代码 });
逻辑说明
当fetch事件触发时,先检查请求URL是否包含你指定的/test.test路径:
- 如果是,直接返回,不执行后续的拦截逻辑,这个请求就会走真实的网络请求流程。用户离线时请求会失败,你的自定义Hook里的
catch分支就会触发,正确把online设为false。 - 如果不是,继续执行你原本的Service Worker缓存策略。
你的自定义Hook代码(配合使用)
const checkOnline = async () => { try { const response = await fetch('/test.test'); setOnline(response.ok); console.log('response.source', response.url); } catch { setOnline(false); } };
额外提示
如果需要更精确的路径匹配,可以用正则表达式,比如精确匹配根路径下的test.test:
if (/^https?:\/\/[^\/]+\/test\.test$/.test(event.request.url)) { return; }
内容的提问来源于stack exchange,提问作者elso
相关产品推荐
相关产品推荐

