【发布时间】:2018-09-12 03:58:50
【问题描述】:
曾经存在offline.js 用于检测连接,但该项目不再维护。此外,浏览器的 'navigator.onLine' 属性是臭名昭著的unreliable。
用于主动检测浏览器在线状态的最佳/最新方法是什么,与现代浏览器(包括移动设备浏览器)兼容,可以在在线状态发生变化时引发各种事件?我需要自己写这个,还是重新发明轮子?
请注意,我的用户群中的 nobody 将更改浏览器中的“脱机工作”设置以联机/脱机。相反,他们会拔掉网线、断开 wifi 网络、开车到没有信号的地方等等。
我的想法是简单地设置一个超时来重复地对我的服务器上的一个 URL 进行 AJAX 调用,并简单地将一个“在线”变量设置为 true/false,并根据错误/成功调用在线/离线回调函数AJAX 调用。这是推荐的方式吗?
【问题讨论】:
-
或许可以试试online/offline events?虽然它可能与 navigator.onLine 相同,但根据 MDN link? 在现代浏览器中应该是可靠的
-
@MalteR 我认为这些事件也不能保证提供真正的在线/离线状态......听起来更像是在offline.js库之后没有人为此开发一个新库被留下等死。我想知道为什么?我错过了什么吗?
-
@MalteR 事件也不起作用...
-
瑞恩你找到什么了吗?我自己写了一个;使用“连接服务”进行持续 ping 并跟踪“在线”属性(和行为主题),以及尝试根据对我的后端的任何请求设置状态的 http 拦截器。这真的很不稳定,但这就是我将浏览器解释为离线的方式,或者更确切地说,后端无法访问:
(err.status === 0 && err.ok === false && err.name === 'HttpErrorResponse') || err.status === 504,但我很确定这是依赖于浏览器/库的。 -
@VincentSels 是的,这也是。只需点击一个 web api 并检查错误。
标签: javascript browser offline offline-browsing