我看过很多帖子,都是关于如何在JavaScript中检测网络连接性的问题,总有一个人说要使用navigator.onLine,另一个人则说它不可靠,只能告诉你是否有可用连接,而不能告诉你是否已连接。
底线是,如果3G/4G和WiFi都已开启,用户没有进入飞行模式或其他任何模式,但由于信号差而无法联系到服务器,那么navigator.onLine会告诉我吗?这只是普通的死区问题。
我看过很多帖子,都是关于如何在JavaScript中检测网络连接性的问题,总有一个人说要使用navigator.onLine,另一个人则说它不可靠,只能告诉你是否有可用连接,而不能告诉你是否已连接。
底线是,如果3G/4G和WiFi都已开启,用户没有进入飞行模式或其他任何模式,但由于信号差而无法联系到服务器,那么navigator.onLine会告诉我吗?这只是普通的死区问题。
浏览器对此属性的实现方式不同。
在Chrome和Safari中,如果浏览器无法连接到本地局域网(LAN)或路由器,则离线;所有其他情况都返回true。因此,当它返回false值时,您可以假设浏览器处于离线状态,但不能假设true值一定意味着浏览器可以访问互联网。您可能会得到误报,例如在计算机运行具有始终处于“连接”状态的虚拟以太网适配器的虚拟化软件的情况下。因此,如果您真的想确定浏览器的在线状态,您应该开发其他检查手段。要了解更多信息,请参见HTML5 Rocks文章 Working Off the Grid。
在Firefox和Internet Explorer中,将浏览器切换到离线模式会发送false值。所有其他条件都返回true值。
https://developer.mozilla.org/en-US/docs/DOM/window.navigator.onLine
我认为对于WebKit浏览器来说,它并不是一种可靠的方式来知道浏览器是否拥有互联网访问,只能知道是否具有某种形式的网络访问。