通过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表单提交的代码
Sep 13 Javascript
ie和firefox不兼容的解决方法集合
Apr 28 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
Jan 16 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
Dec 19 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
Oct 17 Javascript
Lab.js初次使用笔记
Feb 28 Javascript
判断数组是否包含某个元素的js函数实现方法
May 19 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
Jul 07 Javascript
Json按某个键的值进行排序
Dec 22 Javascript
Vue中使用sass实现换肤功能
Sep 07 Javascript
Vue 中可以定义组件模版的几种方式
Aug 06 Javascript
vue.js实现三级菜单效果
Oct 19 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实现登录注册之BootStrap表单功能
2017/09/03 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
python三引号如何输入
2020/07/06 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
交通安全责任书范本
2014/07/24 职场文书
面试通知单大全
2015/04/20 职场文书
创建文明城市倡议书
2015/04/28 职场文书
杨善洲电影观后感
2015/06/04 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android