通过JS判断联网类型和连接状态的实现代码


Posted in Javascript onApril 01, 2015

中国的移动网络环境复杂,为了给用户带去更好访问体验,开发者希望能了解用户当前的联网方式,然后给用户一个符合当前网络环境的请求结果。

W3C的规范中给出了一个方法来获得现在的网络状态navigator.connection;根据Working Draft 29 November 2012协议规范我们可以从接口中获得bandwidth(带宽,M/s)和metered两个参数的值;还提供了一个监听方法,来时刻监听接入环境的变化情况。现实中我们发现很多浏览器并没有返回bandwidth值,而且遵守了Working Draft 07 June 2011的协议返回给我们type(类型,wifi/2g/3g/4g)。

我们接下来就看看各家的支持情况

Android 2.3+ Browser UC Dolphin QQ浏览器 Baidu Firefox Chrome Opera Mini Maxthon
Yes No* Yes Yes* Yes Yes(New) No No Yes

说明下在iPhone中任何浏览器都无法得到相关信息。

通过上面的说明,我们发现还是可以通过这个参数了解很大一部分用户的联网情况的,并且为他们提供更加优质的体验。
接下来我们重点说说各浏览器的返回情况。

大部分浏览器会返回一个int型的类型,其中的特例是QQ浏览器,返回的就是类型名称,对应关系如下

返回值 QQ返回值 类型
0 unknown UNKNOWN
1 ethernet ETHERNET
2 wifi WIFI
3 2g CELL_2G
4 3g CELL_3G
5 4g CELL_4G(中国现在也会出现这个值,是hspa+)
? none NONE

接下去是一个更大的特例,这就是firefox,他使用了新版规范,所以返回的是bandwidth;不过很奇怪的是只要是wifi或3G他就返回20,如果是2G返回的就是0.1953125;每次都一样不管现在网络状态到底是多少。这个问题还会继续跟进。

给大家提供一个demo地址:http://demo.3water.com/js/2015/net.html
Demo中对不支持connection的浏览器直接返回了{type:0},这样就很便利解决了某些浏览器不支持的问题;对于不支持又能上网的浏览器处理为“unknown”当然也是合乎情理的。

很多工程师觉得这个功能支持还不好,还是先不使用的好;但是我觉得只要错误能被处理,风险能被把控,为什么不给那些先天优秀的客户提供更友好的体验呢。

今天同学说到让后端判断速度,这个可能有点难;不过确实可以通过每次的异步请求去得到用户大概的速度(加载的时间和文件大小其实前端都能得到),然后在选择性的提供某些服务,之后也准备向这个方向上多思考下。

Javascript 相关文章推荐
javascript iframe编程相关代码
Dec 28 Javascript
JS 实现导航栏悬停效果(续)
Sep 24 Javascript
Windows8下搭建Node.js开发环境教程
Sep 03 Javascript
Javascript闭包实例详解
Nov 29 Javascript
基于jquery实现下拉框美化特效
Feb 02 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
Jul 23 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
Jan 18 jQuery
Vue注册组件命名时不能用大写的原因浅析
Apr 25 Javascript
layui按条件隐藏表格列的实例
Sep 19 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
Nov 07 Javascript
40行代码把Vue3的响应式集成进React做状态管理
May 20 Javascript
JavaScript动态生成表格的示例
Nov 02 Javascript
Javascript中数组方法汇总(推荐)
Apr 01 #Javascript
javascript闭包的理解
Apr 01 #Javascript
JavaScript数据类型之基本类型和引用类型的值
Apr 01 #Javascript
JavaScript之Object类型介绍
Apr 01 #Javascript
JS修改iframe页面背景颜色的方法
Apr 01 #Javascript
JS返回iframe中frameBorder属性值的方法
Apr 01 #Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
Apr 01 #Javascript
You might like
PHP无限分类的类
2007/01/02 PHP
浅析php中jsonp的跨域实例
2013/06/21 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
jQuery 动态粒子效果示例代码
2020/07/07 jQuery
Python开发网站目录扫描器的实现
2019/02/21 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
Python中base64与xml取值结合问题
2019/12/22 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
linux面试题参考答案(6)
2016/06/23 面试题
电子信息毕业生自荐信
2013/11/16 职场文书
法律专业学生的自我评价
2014/02/07 职场文书
普通话宣传标语
2014/06/26 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
单位接收证明格式
2015/06/18 职场文书
旷工检讨书大全
2015/08/15 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
纯html+css实现打字效果
2021/08/02 HTML / CSS
基于Python实现流星雨效果的绘制
2022/03/18 Python