有没有办法创建连接超时来激活服务工作者?

Is there a way to create connection timeout to activate a service-worker?

我正在使用基于 Chromium 的 Electron 创建离线桌面应用程序。

该应用程序使用远程站点,我们正在使用 service worker 使站点的某些部分脱机。一切都很好,除了我称之为 "airplane wifi situation".

的特定情况

使用 Charles,我将下载带宽限制为 100 字节/秒。连接通过 webview.loadURL 发送,最终在 Chromium 中调用 LoadURLWithParams。问题是它不会失败然后激活服务工作者,就像根本没有连接一样。发送请求后,它将永远等待响应。

我的问题是,如何在一定时间后使请求超时并从服务工作线程加载所有内容,就好像用户真正离线一样?

您自己编写的另一种方法是使用 sw-toolbox 库,它为服务工作者提供路由和运行时缓存策略,以及一些内置选项来帮助处理这些高级用例。特别是,您希望使用 networkTimeoutSeconds parameter 配置在回退到先前缓存的响应之前等待网络响应的时间量。

您可以像下面这样使用它:

toolbox.router.get(
  new RegExp('my-api\.com'),
  toolbox.networkFirst, {
    networkTimeoutSeconds: 10
  }
);

这将配置一个路由,该路由将 GET 请求与包含 my-api.com 的 URL 相匹配,并应用 network-first 策略,该策略将在 10 秒后自动回退到先前缓存的响应。