2013-01-11 7 views
18

Ich habe ein Problem mit der Eigenschaft navigator.onLine.navigator.onLine nicht immer funktioniert

Ich betreibe eine einfache Website von einem lokalen Kiosk läuft auf einem WAMP.

Auf meinem Laptop, wenn ich dies testen, funktioniert es. Ich schalte WiFi aus und die Alarmbox erscheint. Das Trennen des Internets am Kiosk, auf dem die WAMP-Software läuft, führt nicht zum falschen Status. Irgendwelche Ideen warum?

var online = navigator.onLine; 

if (online == false) { 

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

} 

Antwort

35

MDN über 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.

Wie oben beschrieben, ist diese Eigenschaft nicht vertrauenswürdig, so, meiner Meinung nach, die beste Abhilfe ist ein Ajax-Aufruf zu einer serverseitigen Seite. Wenn der Browser offline ist, schlägt die Verbindung fehl, und daher wird das Ereignis onerror aufgerufen. Ansonsten heißt das onload Ereignis:

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

Danke für Ihre Hilfe, dies wies mich in die richtige Richtung. – Jako

+0

Geringfügige Korrektur: Die Funktionsreihenfolge in Ihren Argumenten ist vertauscht, sollte 'function isOnline (yes, no) {...}' sein. – Johan

+0

Was ist, wenn ich jQuery aus dem CDN von Google laden und jQuery-Code ausführen möchte, wenn die Anfrage erfolgreich war? –

Verwandte Themen