用 JavaScript 檢測(cè)瀏覽器在線/離線狀態(tài)(JavaScript API?—?navigator.onLine)

2023-2-7    前端達(dá)人

如今HTML5 移動(dòng)應(yīng)用或 Web app 中越來(lái)越普遍的使用了離線瀏覽技術(shù),所以用 JavaScript 檢測(cè)瀏覽器在線/離線狀態(tài)非常常見(jiàn)。

無(wú)論瀏覽器是否在線,navigator.onLine 屬性都會(huì)提供一個(gè)布爾值。 如果瀏覽器在線,則設(shè)置為 true ,否則設(shè)置為 false 

 if(navigator.onLine) { // true|false // ... }

online 和 offline 事件:

當(dāng)瀏覽器脫機(jī)或上線時(shí),瀏覽器還支持 online 和 offline 事件

window.addEventListener('online', function(e){console.log('online')});
window.addEventListener('offline', function(e){console.log('offline');});

你可以使用幾種熟悉的方式來(lái)注冊(cè)事件:

  • 在 window,document,或 document.body 上使用 addEventListener
  • 將 document 或 document.body 的 ononline 或 onoffline 屬性設(shè)置為一個(gè) JavaScript Function 對(duì)象。(注意:由于兼容性原因,不能使用 window.ononline 或 window.onoffline。)
  • 在 HTML 標(biāo)記中的 body 標(biāo)簽上指定 οnοnline=”…” 或 οnοffline=”…” 特性。

注意事項(xiàng):

  • IE8中需要給document.body綁定事件而不是window
  • 在線離線的變化指的是物理上的網(wǎng)絡(luò)鏈接變化,如果是在控制臺(tái)將網(wǎng)絡(luò)限制為 offline 則不會(huì)觸發(fā)相應(yīng)的事件。

實(shí)例代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用 JavaScript 檢測(cè)瀏覽器在線/離線狀態(tài)(JavaScript API?—?navigator.onLine)</title>
    <style type="text/css"> #status {
            position: fixed;
            width: 100%;
            font: bold 1em sans-serif;
            color: #FFF;
            padding: 0.5em;
        }
        #log {
            padding: 2.5em 0.5em 0.5em;
            font: 1em sans-serif;
        }
        .online {
            background: green;
        }
        .offline {
            background: red;
        } </style>
</head>
<body>
<div id="status"></div>
<div id="log"></div>
<button type="button" id="test">檢查狀態(tài)</button>
<script> window.addEventListener('load', function () { var testBtn = document.getElementById("test"); var status = document.getElementById("status"); var log = document.getElementById("log");

    function updateOnlineStatus(event) { var condition = navigator.onLine ? "online" : "offline";
        status.className = condition;
        status.innerHTML = condition.toUpperCase();

        log.insertAdjacentHTML("beforeend", "Event: " + (event?event.type:"-") + "; Status: " + condition+ " | ");
    }

    window.addEventListener('online', updateOnlineStatus);
    window.addEventListener('offline', updateOnlineStatus);
    testBtn.addEventListener("click", updateOnlineStatus);
    updateOnlineStatus();
}); </script>
</body>
</html>
    

總結(jié):

1、navigator.online屬性提供瀏覽器是否在線的布爾值

2、瀏覽器脫機(jī)或上線還支持online和offline事件(IE8需要給document.body綁定事件而不是window)

藍(lán)藍(lán)設(shè)計(jì)建立了UI設(shè)計(jì)分享群,每天會(huì)分享國(guó)內(nèi)外的一些優(yōu)秀設(shè)計(jì),如果有興趣的話,可以進(jìn)入一起成長(zhǎng)學(xué)習(xí),請(qǐng)加藍(lán)小助,微信號(hào):ben_lanlan,報(bào)下信息,藍(lán)小助會(huì)請(qǐng)您入群。歡迎您加入噢~~希望得到建議咨詢、商務(wù)合作,也請(qǐng)與我們聯(lián)系01063334945。


分享此文一切功德,皆悉回向給文章原作者及眾讀者.
免責(zé)聲明:藍(lán)藍(lán)設(shè)計(jì)尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問(wèn)題,請(qǐng)及時(shí)與我們?nèi)〉寐?lián)系,我們立即更正或刪除。


藍(lán)藍(lán)設(shè)計(jì)yvirxh.cn )是一家專(zhuān)注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)UI設(shè)計(jì)公司、界面設(shè)計(jì)公司、UI設(shè)計(jì)服務(wù)公司、數(shù)據(jù)可視化設(shè)計(jì)公司、UI交互設(shè)計(jì)公司、高端網(wǎng)站設(shè)計(jì)公司、UI咨詢、用戶體驗(yàn)公司、軟件界面設(shè)計(jì)公司

日歷

鏈接

個(gè)人資料

存檔