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 相关文章推荐
javascript学习笔记(三) String 字符串类型介绍
Jun 19 Javascript
解析使用JS 清空File控件的路径值
Jul 08 Javascript
jquery自动切换tabs选项卡的具体实现
Dec 24 Javascript
最全的Javascript编码规范(推荐)
Jun 22 Javascript
js严格模式总结(分享)
Aug 22 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
基于vue展开收起动画的示例代码
Jul 05 Javascript
vue代码分割的实现(codesplit)
Nov 13 Javascript
ES6的异步终极解决方案分享
Jul 11 Javascript
layui数据表格跨行自动合并的例子
Sep 02 Javascript
JQuery常用简单动画操作方法回顾与总结
Dec 07 jQuery
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
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
跟我学Laravel之快速入门
2014/10/15 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
php函数式编程简单示例
2019/08/08 PHP
php array_map()函数实例用法
2021/03/03 PHP
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
python实现简单的TCP代理服务器
2014/10/08 Python
介绍Python中的文档测试模块
2015/04/28 Python
在Python程序中实现分布式进程的教程
2015/04/28 Python
python 实时遍历日志文件
2016/04/12 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
自我评价如何写好?
2014/01/05 职场文书
道路交通安全实施方案
2014/03/12 职场文书
班级寄语大全
2014/04/10 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
重温入党誓词主持词
2015/06/29 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
我的收音机情缘
2022/04/05 无线电