javascript检测是否联网的实现代码


Posted in Javascript onSeptember 28, 2014

最简单粗暴的方式就是加载网络资源,JS文件或者图片文件。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

typeof window.jQuery === "undefined" // return false or ture

用jQuery变量来检测是否联网

function doConnectFunction() {
  return true;
}
function doNotConnectFunction() {
  return false;
}

 var i = new Image();
i.onload = doConnectFunction;
i.onerror = doNotConnectFunction;
i.src = 'http://su.bdimg.com/static/superplus/img/logo_white.png?d=' + escape(Date());

加载网络资源的问题就是检测的互联网,如果是局域网检测是无能为力了。
这时候需要一个更好的解决方案,就要用到navigator.onLine,这个属性比较坑的就是浏览器兼容,chrome、Safari 都完美支持,IE7以上是支持的。火狐和IE6比较坑,只有在浏览器“脱机状态”下才返回false,其他都返回true。掐了网线都是true,Opera直接不支持了。

所以还得加一个兼容方法:给location.hostname地址发一个http头请求,代码如下:

var xhr = new ( window.ActiveXObject || XMLHttpRequest )( "Microsoft.XMLHTTP" );
var status;
xhr.open( "HEAD", "//" + window.location.hostname + "/?rand=" + Math.floor((1 + Math.random()) * 0x10000), false );
 try {
  xhr.send();
  return ( xhr.status >= 200 && xhr.status < 300 || xhr.status === 304 );
 } catch (error) {
  return false;
 }

里面一个要注意的就是open方法的第三个参数要传false,必须是同步请求。

总结:支持navigator.onLine的浏览器就用navigator.onLine,不支持的就发一个http头请求。

原创文章,转载请注明: 转载自前端开发

Javascript 相关文章推荐
JSON 教程 json入门学习笔记
Sep 22 Javascript
JavaScript极简入门教程(三):数组
Oct 25 Javascript
JavaScript自定义等待wait函数实例分析
Mar 23 Javascript
JSON相关知识汇总
Jul 03 Javascript
jquery实现ajax加载超时提示的方法
Jul 23 Javascript
js 判断附件后缀的简单实现方法
Oct 11 Javascript
JavaScript函数节流和函数防抖之间的区别
Feb 15 Javascript
JS自定义滚动条效果简单实现代码
Oct 27 Javascript
Vue隐藏显示、只读实例代码
Jul 18 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
Jan 18 jQuery
vue中的inject学习教程
Apr 24 Javascript
es6函数之严格模式用法实例分析
Mar 17 Javascript
javascript检测浏览器的缩放状态实现代码
Sep 28 #Javascript
Node.js中使用mongoskin操作mongoDB实例
Sep 28 #Javascript
js使用for循环与innerHTML获取选中tr下td值
Sep 26 #Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
Sep 26 #Javascript
简单方法判断JavaScript对象为null或者属性为空
Sep 26 #Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 #Javascript
jQuery判断当前点击的是第几个li的代码
Sep 26 #Javascript
You might like
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
php实现的验证码文件类实例
2015/06/18 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
jQuery 使用手册(一)
2009/09/23 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
详解jQuery选择器
2016/12/21 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
python中__call__内置函数用法实例
2015/06/04 Python
python解析基于xml格式的日志文件
2017/02/25 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
Keras自定义IOU方式
2020/06/10 Python
python中pyqtgraph知识点总结
2021/01/26 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
生产内勤岗位职责
2013/12/07 职场文书
高中毕业自我鉴定
2013/12/16 职场文书
激励员工的口号
2014/06/16 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers