/ / Die unhöflichste Art zu testen, ob das Internet (Google, AWS usw.) zugänglich ist - Javascript, Google-Chrome-Erweiterung, Google-Chrome-App, Offineapps

Die unhöflichste Art zu testen, ob auf das Internet (google, aws usw.) zugegriffen werden kann - Javascript, google-chrome-extension, google-chrome-app, offlineapps

Ich suche nach einer URL, mit der ich testen kann, ob das Internet verfügbar ist.

Ich kann testen meine Server mit einem 1x1 Pixel (unten empfohlen), aber wie teste ich, ob das Internet funktioniert, aber mein Server nicht funktioniert?

In meiner App kann ich diese beiden Ereignisse für die lokale Netzwerkschnittstelle (WLAN-AP) verwenden, jedoch nicht für das Internet (Gateway, DNS, Upstream-Netzwerk):

window.addEventListener("online", onNetworkUp, false);
window.addEventListener("offline", onNetworkDown, false);

So kann ich "online" sein, aber nicht mit dem Internet verbunden.

Um "Internet" zu testen, kann ich meinen API-Server anpingen, möchte aber auch woanders nachsehen, wer möglicherweise eine bessere SLA hat. Z.B. google, amazon usw.

Was ist der am wenigsten unhöfliche Weg, dies zu tun? Gibt es eine URL, die erwartet, dass sie auf diese Weise verwendet wird?

Mike

Antworten:

1 für die Antwort № 1

Der einfachste Weg, um zu überprüfen, ob Sie mit dem Internet verbunden sind, ist die Verwendung von navigator.onLine:

if (navigator.onLine) {
// you are online... do something
} else {
// you"re not online
}

Dies funktioniert jedoch nicht auf Ihrem lokalen Server. Daher besteht meine zweite bevorzugte Möglichkeit (da es viele Möglichkeiten gibt, dies zu tun) darin, eine beliebige Webanforderung (z. B. ein Bild) zu verwenden und eine hinzuzufügen onerror Veranstaltung:

<img src="/images/http://www.example.com/singlepixel.gif" onerror="offline();" />
<script>
function offline() {
alert("Internet offline!");
}
</script>

Offensichtlich sollten Sie eine Anfrage an ein kleines Bild machen, 1x1px Wenn Sie beispielsweise mit dem Internet verbunden sind, dauert das Laden nicht zu lange.

Oder wenn Sie reines Javascript verwenden möchten:

function internetON() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://www.example.com/singlepixel.gif", false);
xhr.send();
return xhr.status === 200;
}

if (internetON()) {
// you are online... do something
} else {
// you"re not online
}

1 für die Antwort № 2

Folgendes habe ich gefunden. Es gibt keine gute Möglichkeit, diese Informationen aus dem Browser abzurufen. Browser überladen "online", um die Implementierungen bedeutungslos zu machen.

Mein Anwendungsfall ist folgender: Ich möchte wissen, ob die App meinen Server erreichen kann, und ein anderes Verhalten anbieten, wenn dies nicht möglich ist.

Ich hatte zwei Möglichkeiten, dies zu tun.

  • Suchen Sie für die PouchDB-Replikation nach Fehlern und gehen Sie davon aus, dass sie offline fehlschlägt - starten Sie sie bei Bedarf neu. Ich stelle mir vor, socket.io verfügt über eine ähnliche Funktion.

  • Wenn ich PouchDB nicht repliziere, aber die Offline-Funktion der App demonstrieren möchte, habe ich meinem Express-Server / r_u_up eine Route hinzugefügt und mit dieser Bibliothek abgefragt offline.js

Ein letzter Hinweis ist, dass / r_u_up serverseitig in Nginx implementiert werden könnte, sodass es nicht einmal Node.js benötigt. Ich habe dies noch nicht implementiert, aber der Ansatz wäre ähnlich Aktivieren der OPTIONS-Anfragen vor dem Flug. Es sollte auch mit anderen Webservern arbeiten.

Das habe ich gelernt!