通过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中的Array对象使用说明
Jan 17 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
Dec 11 Javascript
js实现点小图看大图效果的思路及示例代码
Oct 28 Javascript
js 日期比较相关天数代码
Apr 02 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
Mar 01 Javascript
简单三步实现报表页面集成天气
Dec 15 Javascript
B/S(Web)实时通讯解决方案分享
Apr 06 Javascript
详解webpack自动生成html页面
Jun 29 Javascript
详解 vue better-scroll滚动插件排坑
Feb 08 Javascript
JavaScript递归函数定义与用法实例分析
Jan 24 Javascript
vue中echarts引入中国地图的案例
Jul 28 Javascript
四十九个javascript小知识实用技巧
Nov 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
PHP通用检测函数集合
2006/11/25 PHP
火车头采集器3.0采集图文教程
2007/03/17 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
使用python装饰器验证配置文件示例
2014/02/24 Python
Python实现批量下载图片的方法
2015/07/08 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
工程班组长岗位职责
2013/12/30 职场文书
农业资源与环境专业自荐信范文
2013/12/30 职场文书
考试违纪检讨书
2014/02/02 职场文书
团委竞选演讲稿
2014/04/24 职场文书
詹天佑教学反思
2014/04/30 职场文书
食品流通安全承诺书
2014/05/22 职场文书
新闻编辑求职信
2014/07/13 职场文书
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
HTTP中的Content-type详解
2022/01/18 HTML / CSS
微信小程序实现轮播图指示器
2022/06/25 Javascript