服务工作者是否支持ononline事件?

时间:2017-09-26 03:57:04

标签: service-worker service-worker-events

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

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

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

  • onactivate
  • onfetch
  • oninstall
  • 的onMessage
  • onnotificationclick
  • onnotificationclose
  • onpush
  • onpushsubscriptionchange
  • onsync

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

2 个答案:

答案 0 :(得分:0)

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

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

Spesifically:

  • SW注册onmessage handler
  • 客户端/页面JS注册ononline事件的处理程序
  • 当连接更改时,处理程序通过postMessage API
  • 通知SW
  • SW从客户端收到连接更改消息,并相应地采取行动

postMessage API非常有用,可用于在页面和SW之间传递基本上任何数据。请注意,我的提案没有任何特定消息,只需传递{“new_status”:“online”}等内容。

答案 1 :(得分:0)

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

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