使用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 { ... } |