javascript - 检查用户是否与 Service Worker 重新联机
问题描述
有没有办法检测用户是否使用服务人员连接回网络/在线?
当用户回到网络时,我想获取一些数据。
它可能在 fetch 事件处理程序中完成,但我更喜欢不那么 hacky 的解决方案。
我想出了hacky解决方案的伪代码:
self.addEventListener('fetch', function(event) {
event.respondWith(
fetch(event.request)
.then(function(res) {
// check previous status
// if previous status == offline, user is back online
// do back online stuff...
// set status to online if previous status is offline
})
.catch(function(err) {
// set status to offline
})
);
});
解决方案
您无法检测到 Service Worker 本身从离线状态返回在线状态的时刻(事件)。但是,如果您对此特别感兴趣,可以利用对象中的online
和offline
事件window
。换句话说,您可以在页面上运行的常规 JavaScript 代码(不在 SW 中)中为这些事件添加事件侦听器,并且每当它们发生时,通过postMessage API
. 这样页面上的 JS 会检测到在线/离线变化并通知 SW,之后 SW 可以将这些信息用于它想要的任何目的。
需要注意的一件事:如果浏览器关闭或用户没有查看页面,这些在线/离线事件不会触发,因为它们发生在页面的 JS 执行上下文中。这是设计使然:您不应该创建一个持续跟踪用户连接状态的 Service Worker。
正如其他人所指出的那样,取决于您真正感兴趣的内容(“连接更改何时发生”与“如何检查 SW 中是否在线/离线”),这可能是一个重复的问题,我建议您阅读链接回答。
根据您的要求,我想您想在客户端和服务器之间进行某种同步,不是吗?如果是这样,我建议您阅读Background Sync API
至少受 Chrome 支持的内容,它可能会对您有所帮助。以下是使用 Workbox 库https://developers.google.com/web/tools/workbox/modules/workbox-background-sync的一些示例
推荐阅读
- c# - 空连接字符串
- c# - 如何在 Timer Tick 中停止第一个 IF?
- php - Woocommerce 挂钩函数的第二个参数返回 NULL 而不是 Object
- vue.js - DataForm 中的 Nativescript 更新值
- react-virtualized - 如何对反应虚拟化表中的时间戳列进行排序
- java - 将 JSONArray 转换为 String[] 数组
- types - 如何使用类型系统在解析树中编码父子约束?
- python-3.x - 未显示任何错误,但运行代码时未显示任何内容
- wordpress - 在 Wordpress 中使用 register_setting 添加的文件输入不会上传文件
- ios - 如何在 iOS 中从几小时到几十天后执行一些任务?