通过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 相关文章推荐
服务器安全设置的几个注册表设置
Jul 28 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
Sep 16 Javascript
js用Date对象处理时间实现思路及代码
Jan 31 Javascript
使用JS 清空File控件的路径值
Jul 08 Javascript
JavaScript实现的in_array函数
Aug 27 Javascript
DOM基础教程之使用DOM控制表单
Jan 20 Javascript
window.open()实现post传递参数
Mar 12 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
jQuery实现带水平滑杆的焦点图动画插件
Mar 08 Javascript
微信开发 使用picker封装省市区三级联动模板
Oct 28 Javascript
小程序开发基础之view视图容器
Aug 21 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
Sep 11 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
如何去掉文章里的 html 语法
2006/10/09 PHP
初级的用php写的采集程序
2007/03/16 PHP
php mysql索引问题
2008/06/07 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
Nodejs中解决cluster模块的多进程如何共享数据问题
2016/11/10 NodeJs
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
浅析python中的分片与截断序列
2016/08/09 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
详解Python self 参数
2019/08/30 Python
Python基于内置函数type创建新类型
2020/10/22 Python
CSS3简单实现照片墙
2014/12/12 HTML / CSS
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
abstract class和interface有什么区别
2013/08/04 面试题
三字经教学反思
2014/04/26 职场文书
广播体操比赛口号
2014/06/10 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
请病假条范文
2015/08/17 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
七年级作文之下雨天
2019/12/23 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python