通过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 相关文章推荐
asp.net+jquery滚动滚动条加载数据的下拉控件
Jun 25 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
Jan 23 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
Jul 29 Javascript
jQuery实现表单提交时判断的方法
Dec 13 Javascript
详解iframe与frame的区别
Jan 13 Javascript
Node.js的Web模板引擎ejs的入门使用教程
Jun 06 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 Javascript
js实现canvas图片与img图片的相互转换的示例
Aug 31 Javascript
详解Web使用webpack构建前端项目
Sep 23 Javascript
小程序登录态管理的方法示例
Nov 13 Javascript
js回到页面指定位置的三种方式
Dec 17 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环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
微信小程序仿美团城市选择
2018/06/06 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
小程序实现订单倒计时功能
2019/04/23 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
windows下ipython的安装与使用详解
2016/10/20 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
销售找工作求职信
2013/12/20 职场文书
中学运动会广播稿
2014/01/19 职场文书
晚归检讨书
2014/02/19 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
警示教育观后感
2015/06/17 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js