0

document.ononline是浏览器中可用的事件。是否有服务工作者代码支持的等效事件,它没有 DOM 访问权限?

我看到的所有示例代码都会在处理请求的过程中检查网络状态。为了将本地更新提交到服务器或云,最好立即响应网络可用性。

我能找到的最好的文档是https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope,它只列出了这些事件:

  • 激活
  • 上取
  • 安装时
  • 留言
  • onnotificationclick
  • onnotificationclose
  • 上推
  • onpushsubscriptionchange
  • 同步

其中,sync 似乎最像我所寻求的,但它取决于 SyncManager 的使用,并且它的文档充满了反对在生产代码中使用的警告。

4

2 回答 2

0

这是一个老问题,但我目前对此很感兴趣。我发现虽然 MDN 目前表示(共享)WorkerGlobalScope 支持它,但我现在使用 Chrome DevTools 在我的服务工作者中坐在断点上并且 ServiceWorkerGlobalScope 没有“在线”属性。但是,“navigator.onLine”指示器似乎可以工作。您至少可以检查并立即返回缓存的响应。

我为在线和离线事件添加了事件监听器,但都没有触发,所以它似乎不受支持。我可以想到不支持它的合理理由,但听到真实的理由会很有趣。

于 2021-07-03T05:15:52.497 回答
0

我不确定 SW 中是否有可用的事件。应该有人证实这一点。

您可以通过在页面的 JS 中使用在线事件处理程序逻辑来解决此问题,该逻辑可以通知 SW 连接更改。这也是在 UI 中为用户处理任何通知的合适位置。

特别是:

  • SW 注册一个 onmessage 处理程序
  • 客户端/页面 JS 为在线事件注册一个处理程序
  • 当连接改变时,处理程序通过 postMessage API 通知 SW
  • SW 接收到客户端的连接改变信息并采取相应的行动

postMessage API 非常有用,基本上可以用来在页面和软件之间传递任何数据。请注意,我的提案没有任何特别的消息,只需传递 { "new_status": "online" } 等内容即可。

于 2017-09-26T10:37:19.190 回答