navigator.onLine
注意
这种方式只支持Web环境
NetWork API:http://wicg.github.io/netinfo/
navigator.onLine
只会在机器未连接到局域网或路由器时返回false,其他情况下均返回true。
也就是说,机器连接上路由器后,即使这个路由器没联通网络,navigator.onLine
仍然返回true。
判断网络连接的网络状态
1 | if (navigator.onLine) { |
想要监听浏览器的联网状态, 使用window.onOnline
和window.onOffline
事件:
1 | window.addEventListener("offline", function(e) {alert("offline");}) |
更为安全的做法:
1 | var el = document.body; |
注意,检测ononline事件,要绑定在window对象上
attachEvent——兼容:IE7、IE8;不兼容firefox、chrome、IE9、IE10、IE11、safari、opera
addEventListener——兼容:firefox、chrome、IE、safari、opera;不兼容IE7、IE8
is-online(Web推荐)
注意
这种方式同时支持NodeJS和Web环境
安装依赖
1 | npm install is-online --save |
工具类
1 | const isOnline = require('is-online'); |
internet-available(NodeJS推荐)
注意
这种方式只支持NodeJS环境
相比于
is-online
,这个可以自定义DNS服务器的地址,这样不会因为使用国外的地址而导致网络状态判断不正确。
这个库检测因特网连接状态原理,是检测dns连接状态。
这里大家肯定有个疑问,使用nodejs原生模块dns不是更简洁吗?
你说的没错,nodejs确实提供这样的方法,但是dns原生模块并没有提供超时检测。internet-available可以设置超时参数,默认是5000ms
安装依赖
1 | npm install internet-available --save |
示例代码
1 | const internetAvailable = require("internet-available"); |
注意
端口53不是网址的端口是DNS服务的端口,DNS 协议运行在 UDP 协议之上,使用 端口号53 。
超时时间和重试次数
1 | var internetAvailable = require("internet-available"); |
默认值在源码中可以看到
1 | var socket = dns({ |
默认
- 超时时间:5秒
- 重试次数:5
- 域名:google.com
- 端口:53
- DNS:8.8.8.8