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!");
}
);