Les principaux fournisseurs de navigateurs ne s'accordent pas sur la signification du terme "hors ligne".
Chrome, Safari et Firefox (depuis la version 41) détectent automatiquement quand vous passez "hors ligne", ce qui signifie que les événements et les propriétés "en ligne" se déclenchent automatiquement lorsque vous débranchez votre câble réseau.
Mozilla Firefox (avant la version 41), Opera et IE adoptent une approche différente et vous considèrent comme "en ligne" à moins que vous ne choisissiez explicitement le "mode hors ligne" dans le navigateur, même si vous ne disposez pas d'une connexion réseau opérationnelle.
Il existe des arguments valables en faveur du comportement de Firefox/Mozilla, qui sont exposés dans les commentaires de ce rapport de bogue :
https://bugzilla.mozilla.org/show_bug.cgi?id=654579
Mais, pour répondre à la question - vous ne pouvez pas compter sur les événements/propriétés en ligne/hors ligne pour détecter s'il y a réellement une connectivité réseau.
Au lieu de cela, vous devez utiliser d'autres approches.
La section "Notes" de cet article de Mozilla Developer fournit des liens vers deux autres méthodes :
https://developer.mozilla.org/en/Online_and_offline_events
"Si l'API n'est pas implémentée dans le navigateur, vous pouvez utiliser d'autres signaux pour détecter si vous êtes hors ligne, notamment en écoutant les événements d'erreur AppCache et les réponses de XMLHttpRequest"
Ce lien renvoie à un exemple de l'approche consistant à "écouter les événements d'erreur d'AppCache" :
http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-appcache
...et un exemple de l'approche "écouter les échecs de XMLHttpRequest" :
http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-xml-http-request
HTH, -- Chad
2 votes
Je suis d'accord avec Trefex, mais j'aimerais également ajouter que le support de la détection de connexion est au mieux de mauvaise qualité pour la plupart des applications : le simple fait que le fil soit débranché ne constitue pas immédiatement une perte de connexion. S'appuyer sur une méthode qui ne teste pas physiquement si la connexion est ouverte ne peut pas vraiment garantir des résultats précis.
0 votes
Merci pour vos conseils. Vous recommandez donc la méthode Ajax, c'est-à-dire continuer à envoyer des appels XHR avec des délais d'attente ?
0 votes
L'implémentation de Firefox (et d'IE et d'Opera) est erronée. Voir mon commentaire à cet effet ici : bugzilla.mozilla.org/show_bug.cgi?id=654579#c9
4 votes
Vous pouvez consulter Offline.js une bibliothèque open-source conçue à cet effet.