Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查用户是否与服务人员重新联机_Javascript_Service Worker_Progressive Web Apps_Service Worker Events - Fatal编程技术网

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库的示例

您可以查看此帖子,查看可能的副本