Une fois pour toutes, qu'est-ce que navigator.onLine fait?

J'ai vu mille messages où quelqu'un demande comment détecter la connectivité Internet en javascript et il y a toujours une personne qui dit utiliser navigator.onLine et une autre qui dit qu'elle n'est pas fiable et ne vous indique que si une connexion est disponible, pas si Vous êtes connecté.

En bout de ligne, navigator.onLine me dire si l'utilisateur ne peut pas contacter le serveur en raison d'une mauvaise couverture même si 3G / 4G et WiFi sont allumés et qu'ils ne sont pas en mode avion ou quoi que ce soit? Juste votre zone morte moyenne.

De l' article MDN sur navigator.onLine :

Les navigateurs implémentent cette propriété différemment.

Dans Chrome et Safari, si le navigateur ne peut pas se connecter à un réseau local (LAN) ou à un routeur, il est hors connexion; Toutes les autres conditions sont vraies. Donc, alors que vous pouvez supposer que le navigateur est hors-ligne lorsqu'il renvoie une fausse valeur, vous ne pouvez pas supposer qu'une valeur réelle signifie nécessairement que le navigateur peut accéder à Internet. Vous pouvez obtenir des faux positifs, par exemple dans le cas où l'ordinateur exécute un logiciel de virtualisation doté d'adaptateurs ethernet virtuels qui sont toujours "connectés". Par conséquent, si vous souhaitez vraiment déterminer le statut en ligne du navigateur, vous devriez développer des moyens supplémentaires pour le contrôle. Pour en savoir plus, consultez l'article HTML5 Rocks, Working Off the Grid .

Dans Firefox et Internet Explorer, la commutation du navigateur en mode hors ligne envoie une fausse valeur. Toutes les autres conditions renvoient une vraie valeur

Selon MDN, cela varie selon le navigateur pour la mise en œuvre.

https://developer.mozilla.org/en-US/docs/DOM/window.navigator.onLine

Je suppose avec les navigateurs WebKit, ce n'est pas un moyen fiable de savoir qu'un navigateur a un accès Internet, juste une forme d'accès au réseau.