通过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 相关文章推荐
jquery实现div阴影效果示例代码
Sep 16 Javascript
JS简单操作select和dropdownlist实例
Nov 26 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
Dec 07 Javascript
基于JavaScript短信验证码如何实现
Jan 24 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
AngularJS执行流程详解
Feb 17 Javascript
AngularJS实现进度条功能示例
Jul 05 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
Nov 19 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
Dec 29 Javascript
JavaScript模板引擎原理与用法详解
Dec 24 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
Mar 23 Javascript
Vue用mixin合并重复代码的实现
Nov 27 Vue.js
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生成带有雪花背景的验证码
2006/10/09 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
php cookie 详解使用实例
2016/11/03 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
python爬取51job中hr的邮箱
2016/05/14 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
详解用python生成随机数的几种方法
2019/08/04 Python
python实现图像外边界跟踪操作
2020/07/13 Python
python如何爬取网页中的文字
2020/07/28 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
团队拓展活动方案
2014/08/28 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技