You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:40:28