通过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 相关文章推荐
js每次Title显示不同的名言
Sep 25 Javascript
判断复选框是否被选中的两种方法
Jun 04 Javascript
js/jquery判断浏览器的方法小结
Sep 02 Javascript
全面理解JavaScript中的继承(必看)
Jun 16 Javascript
浅谈JavaScript中数组的增删改查
Jun 20 Javascript
AngularJS入门教程之更多模板详解
Aug 19 Javascript
Javascript 函数的四种调用模式
Nov 05 Javascript
微信小程序之拖拽排序(代码分享)
Jan 21 Javascript
JS实现批量上传文件并显示进度功能
Jun 27 Javascript
JS手机端touch事件计算滑动距离的方法示例
Oct 26 Javascript
JS中Promise函数then的奥秘探究
Jul 30 Javascript
fetch 如何实现请求数据
Dec 20 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
使用Apache的rewrite技术
2006/06/22 PHP
通过文字传递创建的图形按钮
2006/10/09 PHP
PHP令牌 Token改进版
2008/07/18 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
用js做一个小游戏平台 (一)
2009/12/29 Javascript
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
python第三方库学习笔记
2020/02/07 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
学生自我鉴定
2013/12/18 职场文书
八一建军节活动方案
2014/02/10 职场文书
青年志愿者活动总结
2014/04/26 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
赤壁观后感(2)
2015/06/15 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
python小程序之飘落的银杏
2021/04/17 Python
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python