Javascript 2018年如何检测浏览器是否离线?

Javascript 2018年如何检测浏览器是否离线?,javascript,browser,offline,offline-browsing,Javascript,Browser,Offline,Offline Browsing,以前存在用于检测连接的项目,但该项目不再维护。此外,浏览器的“navigator.onLine”属性也是出了名的 与现代浏览器(包括移动设备浏览器)兼容,可以在在线状态发生变化时引发各种事件,主动检测浏览器在线状态的最佳/最新方法是什么?我需要自己写这篇文章吗,还是这是对轮子的改造 请注意,我的用户群中没有人会为了联机/脱机而更改浏览器中的“脱机工作”设置。相反,他们将拔掉网络电缆,断开与wifi网络的连接,开车去没有信号的地方,等等 我的想法是简单地设置一个超时来重复对服务器上的URL进行AJ

以前存在用于检测连接的项目,但该项目不再维护。此外,浏览器的“navigator.onLine”属性也是出了名的

与现代浏览器(包括移动设备浏览器)兼容,可以在在线状态发生变化时引发各种事件,主动检测浏览器在线状态的最佳/最新方法是什么?我需要自己写这篇文章吗,还是这是对轮子的改造

请注意,我的用户群中没有人会为了联机/脱机而更改浏览器中的“脱机工作”设置。相反,他们将拔掉网络电缆,断开与wifi网络的连接,开车去没有信号的地方,等等

我的想法是简单地设置一个超时来重复对服务器上的URL进行AJAX调用,并简单地将“online”变量设置为true/false,以及根据AJAX调用的错误/成功调用online/offline回调函数。这是推荐的方法吗?

只需使用

navigator.onLine
请参阅浏览器支持

使用

`var wentOffline, wentOnline;
 function handleConnectionChange(event){
    if(event.type == "offline"){
        console.log("You lost connection.");
        wentOffline = new Date(event.timeStamp);
    }
    if(event.type == "online"){
        console.log("You are now back online.");
        wentOnline = new Date(event.timeStamp);
        console.log("You were offline for " + (wentOnline — wentOffline) / 1000 + "seconds.");
    }
}
window.addEventListener('online', handleConnectionChange);
window.addEventListener('offline', handleConnectionChange);`

查看帖子:

是否可以试试?虽然它可能与navigator.onLine相同,但根据?@MalteR的说法,在现代浏览器中navigator.onLine应该是可靠的,我认为这些事件也不能保证提供真正的在线/离线状态。。。这听起来更像是在offline.js库死掉之后,没有人费心为此开发一个新的库。我想知道为什么?我错过什么了吗?@MalteR事件也不起作用了…你找到什么了吗Ryan?我自己写了一本;“连接服务”不断进行ping并跟踪“在线”属性(和行为主题),以及http拦截器,该拦截器尝试根据对我的后端的任何请求设置状态。这真的很奇怪,但这就是我解释浏览器离线的方式,或者更确切地说,后端无法访问的方式:
(err.status==0&&err.ok==false&&err.name===HttpErrorResponse')| err.status==504
,但我很确定这依赖于浏览器/库。@VincentSels是的,这也是原因。只需点击一个web api并检查错误。我不知道你为什么说它不再工作,这是一个被广泛接受的功能,请查看浏览器支持。如果你测试了它,你会发现它不工作。只需在chrome版本69.0.3497.100中测试。你是如何通过打开和关闭wifi或开发工具来测试它的?,在DevTool中,它可以工作,但如果你真的打开/关闭你的连接,它就不能工作。我用不同的笔记本电脑/用户使用相同的Chrome浏览器版本(在Ubuntu上)对它进行了测试,出于某种原因,它对某些笔记本电脑工作,而对其他笔记本电脑不工作。