通過(guò)JS判斷網(wǎng)絡(luò)狀態(tài)調(diào)研及實(shí)例demo說(shuō)明

官方文檔

English Document

demo地址

[demo]http://mjs.sinaimg.cn/wap/online/cms/article/cm/network.html)
demo來(lái)源于地址http://www.w3cmark.com/2016/442.html

摘要

在設(shè)備的使用中,這個(gè)Network Information API用于 web 嘗試處理網(wǎng)絡(luò)連接信息。

用例與需求

本文檔嘗試處理來(lái)自于Review of Apps that Use Network Information的需求,如下:

  • 提供獲取當(dāng)前網(wǎng)絡(luò)連接的類型在系統(tǒng)與網(wǎng)絡(luò)有交互的時(shí)候,這個(gè)信息需要在頁(yè)面加載完畢立刻被提供,或者在盡可能接近加載完畢狀態(tài)提供
  • 提供一種腳本可以被通知到的方式如果這個(gè)連接類型有改變。這樣就可以允許開發(fā)者動(dòng)態(tài)的改變DOM且或者通知用戶他們的網(wǎng)絡(luò)類型有變化(這種變化會(huì)在某種程度上影響這他們)

使用用例(官方文檔)

EXAMPLE 1
//得到網(wǎng)絡(luò)鏈接類型
var type = navigator.connection.type;

// 在第一次網(wǎng)絡(luò)跳躍的時(shí)候得到下行最大比特率
var max = navigator.connection.downlinkMax;

function changeHandler(e) {
  // 網(wǎng)絡(luò)鏈接改變時(shí)處理函數(shù)
}

// 注冊(cè)網(wǎng)絡(luò)鏈接改變事件
navigator.connection.onchange = changeHandler;

// 另一種注冊(cè)方式
navigator.connection.addEventListener('change', changeHandler);

連接類型

  • bluetooth
    藍(lán)牙連接
  • cellular
    A cellular connection (e.g., EDGE, HSPA, LTE, etc.).
  • ethernet
    以太網(wǎng)鏈接
    none
  • No network connection.
    沒(méi)有網(wǎng)絡(luò)鏈接.等同于 navigator.onLine === false
  • mixed
    用戶代理用的多個(gè)鏈接類型
  • other
    鏈接類型未知
  • unknown
    用戶代理建立了鏈接,但是不能夠或者不愿意確定潛在的網(wǎng)絡(luò)連接類型
  • wifi
    wifi連接
  • wimax
    wifimax連接
    以上的鏈接類型都可以通過(guò)ConnectionType枚舉

ConnectionType枚舉

enum ConnectionType {
    "bluetooth",
    "cellular",
    "ethernet",
    "mixed",
    "none",
    "other",
    "unknown",
    "wifi",
    "wimax"
};

以上為嘗試翻譯的官方文檔前幾行

個(gè)人測(cè)試說(shuō)明:

由于在業(yè)務(wù)中最為關(guān)心當(dāng)前網(wǎng)絡(luò)狀態(tài)是否為wifi,所以僅判斷了當(dāng)前APP是否支持navigator.connection.type判斷其是否可以正則匹配到wifi
測(cè)試結(jié)果整理表格如下:

機(jī)型 系統(tǒng)版本 瀏覽器 版本 結(jié)論
小米5 A7.0 weixin 6.5 type:wifi 支持
小米5 A7.0 weibo 7.5 type:wifi 支持
小米5 A7.0 UC 11.6.2 type:wifi 支持
華為MT7 A5.1.1 UC 11.6.2 type:wifi 支持
華為P9 A6.0 weibo 7.7.0 type:wifi 支持
華為P9 A6.0 UC 11.0.4 type:5(wifi) 支持
華為P9 A6.0 QQ 6.6.8 type:wifi 支持
紅米Note A5.0.2 UC 11.6.1 type:wifi 支持
iPhone 10_3_2 weixin 6.5.12 type:未知 NetType wifi 支持
iPhone 10_3_2 QQ 7.1.5 type:未知 NetType wifi 支持
三星Note5 A6.0 原生 5.4 type:wifi 支持
三星Note5 A6.0 weibo 6.12.3 type:wifi 支持
vivo X9 A6.0 weibo 7.7.0 type:wifi 支持
vivo X9 A7.0 weixin 6.5 type:wifi 支持

當(dāng)前測(cè)試初步結(jié)論:

  • navigator.connectionAPI不支持:
    iphone(微信、微博、UC、QQ瀏覽器、百度瀏覽器)安卓(QQ瀏覽器)
  • 支持navigator.connection但不能獲取到具體網(wǎng)絡(luò)type:
    安卓(百度瀏覽器)
  • 支持navigator.connection且可獲取到type(大多數(shù)):
    安卓(UC、微信、微博)

當(dāng)前測(cè)試特例

支持navigator.connection且可獲取到type(大多數(shù))中特例如下:

機(jī)型 系統(tǒng)版本 瀏覽器 版本 結(jié)論
紅米Note 5.0 weibo 7.7.1 type:unknown 不支持

[type:unknown]屬于支持navigator.connection但不能獲取到具體網(wǎng)絡(luò)type
華為p9不返回wifi字樣 而是通過(guò)數(shù)字標(biāo)識(shí)

機(jī)型 系統(tǒng)版本 瀏覽器 版本 結(jié)論
華為P9 A6.0 UC 11.0.4 type:5(wifi) 支持
華為P9 A6.0 UC 11.0.4 type:2(4g) 支持

當(dāng)前測(cè)試結(jié)論:

由于測(cè)試手機(jī)有限,并未覆蓋到安卓各種版本與機(jī)型,若有錯(cuò)誤還請(qǐng)?zhí)岢?br> 暫認(rèn)為安卓UC、微博支持較好
微信在安卓和ios另有可以獲取的方式

微信/QQ獲取狀態(tài)說(shuō)明

微信和qq我們可以通過(guò)另一種方式在安卓、IOS拿到網(wǎng)絡(luò)狀態(tài)
微信UA如下:

/*
 * 微信ua  
 */
Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89 MicroMessenger/6.5.12 NetType/WIFI Language/zh_CN
/*
 * QQua
 */
Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89 QQ/7.1.5.428 V1_IPH_SQ_7.1.5_1_APP_A Pixel/750 Core/UIWebView NetType/WIFI QBWebViewType/1

Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89 QQ/7.1.5.428 V1_IPH_SQ_7.1.5_1_APP_A Pixel/750 Core/UIWebView NetType/2G QBWebViewType/1

從UA中看到我們可以通過(guò)如下方式進(jìn)行判斷:

if(/NetType/.test(ua)){
    var type = ua.match(/NetType\/(\S*)/);
    network_state = type[1];
}

其它補(bǔ)充

官方文檔中給了其它的方法,但是基本都不支持,所以也就沒(méi)有進(jìn)行方法的使用和測(cè)試,對(duì)應(yīng)的文檔也沒(méi)有翻譯但是其中的onchange事件是可以被支持的,通過(guò)監(jiān)控onchange事件監(jiān)控到網(wǎng)絡(luò)的改變。
通過(guò)枚舉navigator.connection屬性發(fā)現(xiàn):UC瀏覽器只支持ontypechange,其它有的使用onchange,有的使用ontypechange,所以使用時(shí)需要做兼容處理。

【如有錯(cuò)誤還請(qǐng)指正】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容