JS在瀏覽器中判斷當前網路狀態

itwangchen發表於2019-04-02

使用JS在瀏覽器中判斷當前網路狀態的幾種方法如下:

1. navigator.onLine

2. ajax請求

3. 獲取網路資源

4. bind()

1. navigator.onLine

通過navigator.onLine判斷當前網路狀態:



if(navigator.onLine){
...
}else{
...
}

非常簡單,但是並不準確-根據MDN的描述:

navigator.onLine只會在機器未連線到區域網或路由器時返回false,其他情況下均返回true。

也就是說,機器連線上路由器後,即使這個路由器沒聯通網路,navigator.onLine仍然返回true。

2. ajax請求

採用get請求的方式,根據返回值判斷是否能夠成功get到資料,從而確定當前的網路狀態:


$.ajax({
url: 'x.html',
success: function(result){
...
},
error: function(result){
...
}
});

3. 獲取網路資源

原理同2,在頁面放一張隱藏圖片,設定其onerror函式(獲取圖片資源失敗時會呼叫該函式):


<script src="./jquery-3.1.1.min.js"></script>
<script>
function getImgError(){
alert("Network disconnect!");
}
$().ready(function(){
$("#btn-test").click(function(){
var timeStamp = Date.parse(new Date());
$("#img-test").attr("src", imgPath + "?timestamp=" + timeStamp);
});
});
</script>
<body>
<img id="img-test" style="display:none;" onerror="getImgError()"/>
<button id="btn-test">check status</button>
</body>

每次點選button時,更新該圖片的src。若獲取圖片失敗,則認為網路連線失敗

這種判斷網路狀態的準確完全取決於圖片資源是否穩定。。。

4. bind()

原理同1:


var netStatue = true;
$(window).bind('online', function(){
netStatue = true;
});
$(window).bind('offline', function(){
netStatue = false;
});
...
if(netStatue){
...
}else{
...
}


相關文章