2013-01-11 3 views
18

navigator.onLineプロパティに問題があります。navigator.onLineは常に動作しない

私は、WAMPで動作するローカルキオスクから簡単なウェブサイトを運営しています。

ノートパソコンでは、これをテストすると機能します。私はWiFiをオフにし、警告ボックスが表示されます。 WAMPソフトウェアを実行しているキオスク上のインターネット接続を切断しても、偽のステータスは発生しません。なぜどんなアイデア?

var online = navigator.onLine; 

if (online == false) { 

    alert("Sorry, we currently do not have Internet access."); 
    location.reload(); 

} 

答えて

35

MDNについてnavigator.onLine

In Chrome and Safari, if the browser is not able to connect to a local area network (LAN) or a router, it is offline; all other conditions return true. So while you can assume that the browser is offline when it returns a false value, you cannot assume that a true value necessarily means that the browser can access the internet.

前述したように、このプロパティは信頼できるではない、そう、私の意見では、最高の回避策は、サーバー側のページへのAJAX呼び出しです。ブラウザがオフラインの場合、接続は失敗し、onerrorイベントが呼び出されます。それ以外の場合は、onloadイベントが呼び出されます。

function isOnline(no,yes){ 
    var xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHttp'); 
    xhr.onload = function(){ 
     if(yes instanceof Function){ 
      yes(); 
     } 
    } 
    xhr.onerror = function(){ 
     if(no instanceof Function){ 
      no(); 
     } 
    } 
    xhr.open("GET","anypage.php",true); 
    xhr.send(); 
} 

isOnline(
    function(){ 
     alert("Sorry, we currently do not have Internet access."); 
    }, 
    function(){ 
     alert("Succesfully connected!"); 
    } 
); 
+0

これは正しい方向に私を指摘してくれました。 – Jako

+0

マイナーな訂正 - 引数の関数の順序が入れ替えられました。 'function isOnline(yes、no){...}' – Johan

+0

GoogleのCDNからjQueryをロードし、リクエストが成功した場合はjQueryコードを実行するとどうなりますか? –

関連する問題