32

navigator.onLineプロパティに問題があります。

WAMPで実行されているローカルキオスクから簡単なWebサイトを実行しています。

私のラップトップでこれをテストすると、動作します。WiFiをオフにすると、アラートボックスが表示されます。WAMPソフトウェアを実行しているキオスクでインターネットを切断しても、誤ったステータスは生成されません。なぜ何かアイデアはありますか?

var online = navigator.onLine;

if (online == false) {

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

}
4

2 に答える 2

57

navigator.onLineに関するMDN :

ChromeとSafariでは、ブラウザがローカルエリアネットワーク(LAN)またはルーターに接続できない場合、ブラウザはオフラインになっています。他のすべての条件はtrueを返します。したがって、ブラウザが偽の値を返したときにブラウザがオフラインであると想定することはできますが、真の値が必ずしもブラウザがインターネットにアクセスできることを意味するとは限りません。

上記のように、このプロパティは信頼できないため、私の意見では、最善の回避策はサーバー側のページへの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!");
    }
);
于 2013-01-11T17:11:00.660 に答える
4

axiosを使用している場合:

axios.request(options).catch(function(error) {
  if (!error.response) {
    // network error (server is down or no internet)
  } else {
    // http status code
    const code = error.response.status
    // data from server while error
    const response = error.response.data
  }
});
于 2019-05-04T09:37:11.017 に答える