J'essaie de détecter avec précision quand le navigateur se déconnecte, en utilisant les événements HTML5 en ligne et hors ligne.
Voici mon code:
<script>
// FIREFOX
$(window).bind("online", applicationBackOnline);
$(window).bind("offline", applicationOffline);
//IE
window.onload = function() {
document.body.ononline = IeConnectionEvent;
document.body.onoffline = IeConnectionEvent;
}
</script>
Cela fonctionne bien lorsque je viens de cliquer sur "Travailler hors ligne" sur Firefox ou IE, mais cela fonctionne de manière aléatoire lorsque je débranche le câble.
Quelle est la meilleure façon de détecter ce changement? Je voudrais éviter de répéter les appels ajax avec des délais d'attente.
javascript
jquery
offline
jquery-events
network-connection
Pierre Duplouy
la source
la source
Réponses:
Les fournisseurs de navigateurs ne peuvent pas s'entendre sur la façon de définir hors ligne. Certains navigateurs ont une fonctionnalité de travail hors ligne, qu'ils considèrent comme distincte d'un manque d'accès au réseau, ce qui est encore une fois différent de l'accès à Internet. Le tout est un gâchis. Certains fournisseurs de navigateurs mettent à jour l'indicateur navigator.onLine lorsque l'accès réel au réseau est perdu, d'autres non.
De la spécification:
Enfin, la spécification note:
la source
Les principaux fournisseurs de navigateurs diffèrent sur ce que signifie «hors ligne».
Chrome et Safari détectent automatiquement lorsque vous passez "hors ligne", ce qui signifie que les événements et propriétés "en ligne" se déclenchent automatiquement lorsque vous débranchez votre câble réseau.
Firefox (Mozilla), Opera et IE adoptent une approche différente et vous considèrent comme "en ligne" à moins que vous ne choisissiez explicitement "Mode hors ligne" dans le navigateur - même si vous ne disposez pas d'une connexion réseau fonctionnelle.
Il existe des arguments valides pour le comportement de Firefox / Mozilla, qui sont décrits 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 vous fier aux événements / propriétés en ligne / hors ligne pour détecter s'il existe réellement une connectivité réseau.
Au lieu de cela, vous devez utiliser des approches alternatives.
La section "Notes" de cet article Mozilla Developer fournit des liens vers deux méthodes alternatives:
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, y compris l'écoute des événements d'erreur AppCache et des réponses de XMLHttpRequest"
Ce lien vers un exemple de l'approche «écouter les événements d'erreur AppCache»:
http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-appcache
... et un exemple de l'approche "écoute des échecs XMLHttpRequest":
http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-xml-http-request
HTH, - Tchad
la source
updates this property when the OS reports a change in network connectivity on Windows, Linux, and OS X.
(selon les documents que vous avez mentionnés). Donc, ce n'est pas seulement hors ligne si vous naviguez avec le navigateur "Mode hors ligne"Aujourd'hui, il existe une bibliothèque JavaScript open source qui fait ce travail: elle s'appelle
Offline.js
.https://github.com/HubSpot/offline
Assurez-vous de vérifier le README complet . Il contient des événements auxquels vous pouvez vous connecter.
Voici une page de test . C'est beau / a une belle interface utilisateur de retour au fait! :)
la source
La meilleure façon qui fonctionne maintenant sur tous les principaux navigateurs est le script suivant:
Source: http://robertnyman.com/html5/offline/online-offline-events.html
la source
Depuis récemment,
navigator.onLine
montre la même chose sur tous les principaux navigateurs, et est donc utilisable.Les versions les plus anciennes qui prennent en charge cela de la bonne manière sont: Firefox 41 , IE 9, Chrome 14 et Safari 5.
Actuellement, cela représentera presque tout le spectre des utilisateurs, mais vous devez toujours vérifier les capacités des utilisateurs de votre page.
Avant FF 41, il n'apparaissait que
false
si l'utilisateur mettait manuellement le navigateur en mode hors ligne. Dans IE 8, la propriété était sur lebody
, au lieu dewindow
.source: caniuse
la source
L'
window.navigator.onLine
attribut et ses événements associés sont actuellement peu fiables sur certains navigateurs web ( en particulier de bureau Firefox ) comme l'a dit @Junto, j'ai donc écrit une petite fonction ( en utilisant jQuery) qui vérifient périodiquement l'état de la connectivité réseau et augmenter le lieuoffline
et l'online
événement:Vous pouvez l'utiliser comme ceci:
Pour écouter les événements hors ligne et en ligne (avec l'aide de jQuery):
la source
navigator.onLine est un gâchis
Je suis confronté à cela en essayant de faire un appel ajax au serveur.
Il existe plusieurs situations possibles lorsque le client est hors ligne:
La solution que j'utilise est de contrôler moi-même le statut avec javascript. J'ai défini la condition d'un appel réussi, dans tous les autres cas, je suppose que le client est hors ligne. Quelque chose comme ça:
la source
En HTML5, vous pouvez utiliser la
navigator.onLine
propriété. Regardez ici:http://www.w3.org/TR/offline-webapps/#related
Votre comportement actuel est probablement aléatoire car le javascript ne prépare que la variable "navigateur" et sait ensuite si vous êtes hors ligne et en ligne, mais il ne vérifie pas réellement la connexion réseau.
Faites-nous savoir si c'est ce que vous recherchez.
Sincères amitiés,
la source
Veuillez trouver le module require.js que j'ai écrit pour Offline.
Veuillez lire ce billet de blog et laissez-moi savoir ce que vous pensez. http://zen-and-art-of-programming.blogspot.com/2014/04/html-5-offline-application-development.html Il contient un exemple de code utilisant offline.js pour détecter lorsque le client est hors ligne.
la source
vous pouvez détecter facilement plusieurs navigateurs hors ligne comme ci-dessous
vous pouvez remplacer yoururl.com par
document.location.pathname
.Le nœud de la solution est, essayez de vous connecter à votre nom de domaine, si vous ne parvenez pas à vous connecter - vous êtes hors ligne. fonctionne cross browser.
la source
J'utilise l'option FALLBACK dans le manifeste du cache HTML5 pour vérifier si mon application html5 est en ligne ou hors ligne en:
Dans la page html, j'utilise javascript pour lire le contenu du fichier txt en ligne / hors ligne:
Lorsqu'il est hors ligne, le script lira le contenu du fichier offline.txt. Sur la base du texte des fichiers, vous pouvez détecter si la page Web est en ligne ou hors ligne.
la source
Voici ma solution.
Testé avec IE, Opera, Chrome, FireFox, Safari, comme Phonegap WebApp sur IOS 8 et comme Phonegap WebApp sur Android 4.4.2
Cette solution ne fonctionne pas avec FireFox sur localhost.
=================================================== ================================
onlineCheck.js (chemin du fichier: "root / js / onlineCheck.js):
=================================================== ================================
index.html (chemin du fichier: "root / index.html"):
=================================================== ================================
checkOnline.php (chemin du fichier: "root"):
la source
eh bien, vous pouvez essayer le plugin javascript qui peut surveiller la connexion du navigateur en temps réel et avertit l'utilisateur si Internet ou la connexion du navigateur avec Internet est tombée en panne.
Plugin Javascript Wiremonkey et la démo que vous pouvez trouver ici
la source
Utilisation du corps du document:
Utilisation de l'événement Javascript:
Référence :
Document-Body: événement en ligne
Javascript-Event: événements en ligne et hors ligne
Réflexions supplémentaires:
Pour expédier autour de la "connexion réseau n'est pas la même chose que la connexion Internet" Problème des méthodes ci-dessus: Vous pouvez vérifier la connexion Internet une fois avec ajax au démarrage de l'application et configurer un mode en ligne / hors ligne. Créez un bouton de reconnexion pour que l'utilisateur se connecte. Et ajoutez à chaque requête ajax échouée une fonction qui renvoie l'utilisateur en mode hors ligne.
la source
window.addEventListener('online', updateOnlineStatus(event) );
car vous appelez immédiatement la fonction updateOnlineStatus (). Ça devrait êtrewindow.addEventListener('online', updateOnlineStatus );