Javascript 检查用户是否与服务人员重新联机
是否有方法检测用户是否已使用服务人员连接回网络/在线 我想在用户返回网络时获取一些数据 这可能是在获取事件处理程序中完成的,但我更喜欢不太粗糙的解决方案 我找到的黑客解决方案的伪代码:Javascript 检查用户是否与服务人员重新联机,javascript,service-worker,progressive-web-apps,service-worker-events,Javascript,Service Worker,Progressive Web Apps,Service Worker Events,是否有方法检测用户是否已使用服务人员连接回网络/在线 我想在用户返回网络时获取一些数据 这可能是在获取事件处理程序中完成的,但我更喜欢不太粗糙的解决方案 我找到的黑客解决方案的伪代码: self.addEventListener('fetch', function(event) { event.respondWith( fetch(event.request) .then(function(res) {
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
})
);
});
您无法在服务工作者自身中检测到从脱机状态返回联机状态的时刻(事件)。但是,如果您对此特别感兴趣,则可以利用
窗口中的联机
和脱机
事件。换句话说,您可以在页面上运行的常规JavaScript代码(不在SW中)中为这些事件添加事件侦听器,并且无论何时发生,都可以通过postMessage API
通知SW。这样,页面上的JS会检测到在线/离线更改并通知软件,之后软件可能会将该信息用于任何目的
需要注意的是:如果浏览器关闭或用户未查看页面,这些在线/离线事件不会触发,因为它们发生在页面的JS执行上下文中。这是出于设计:您不应该能够创建一个连续跟踪用户连接状态的服务工作者
正如其他人指出的,根据您真正感兴趣的内容(“连接何时发生变化”与“如何检查软件中是否在线/离线”),这可能是一个重复的问题,我建议您阅读链接的答案
根据您的要求,我想您可能希望在客户端和服务器之间进行某种同步,不是吗?如果是这样的话,我建议您阅读一下至少Chrome支持的后台同步API
,它可能会对您有所帮助。下面是一些使用Workbox库的示例您可以查看此帖子,查看可能的副本