在很多場景下,只有機器已經連網以後,web應用程式才能啟動。如果沒有連網,就會提示錯誤。 、
但是機器有時候要重啟。 如果機器重新啟動後,立刻啟動web應用的話,可能,機器上的網路服務還沒準備好。
特別是windows7,啟動網路服務要好幾秒,這時候怎麼辦呢?
之前嘗試過幾種方法:
例如 透過ping來判斷, 但是ping需要有一個非本機的ip位址。 這個不是很通用
例如監控某個連接埠是否已經被佔用,但是光埠佔用,也不能說明網路已經啟動了。
另一個方面,如果是web應用的話,最好是在前端判斷,例如用javascript。
網路上也有人寫 javascript 的ping的模擬效果。但確實有些麻煩。
怎麼辦呢,關鍵的時候,還是html5能給出好的解決方法:
方法一:
navigator.onLine
if (navigator.onLine)
{ //正常運作}
else {else { //執行離線狀態時的任務}
這個html5的navigator的新特性可以很簡單幫我們搞定
HTML5為此定義了一個navigator.onLine屬性,這個屬性值為true表示設備能上網,值為false表示設備離線。
當然不同的瀏覽器,對這個的支援還不太一樣
IE6 和Safari 5 支援的比較好
Firefox 3 和支援navigator.onLine屬性,但你必須手工選取選單項目「檔案- Web開發人員(設定)-離線工作」才能讓瀏覽器正常的運作。
Chrome需要12以上。
方法二: 當然,如果想支援的更相容,可以使用以下2個事件:online和offline。當網路從離線變為線上或從線上變為離線時,分別觸發這兩個事件。這兩個事件在window物件上觸發。
為了偵測應用程式是否離線,在頁面載入後,最好先透過navigator.onLine取得初始的狀態。然後,就是透過上述兩個事件來決定網路連線狀態是否變化。當上述事件觸發式,navigator.onLine屬性的值也會改變,不過必須要手動輪詢這個屬性才能偵測到網路狀態的變化。
var EventUtil = {
, type, handler) {
if (element.addEventListener) {
element.addEventListener(type, handler, false);
} else if (element.attachEvent) {
element.attachEvent(" on" type, handler);
} else {
element["on" type] = handler;
}
}
};
EventUtil.addHandler(window, "online ", function () {
alert("Online");
});
EventUtil.addHandler(window, "offline", function () {
alert("Offline");
});