Comment détecter que la connexion Internet est hors ligne en JavaScript?
javascript
ajax
offline
connectivity
internet-connection
Daniel Silveira
la source
la source
Réponses:
Vous pouvez déterminer que la connexion est perdue en effectuant des demandes XHR ayant échoué .
L'approche standard consiste à réessayer la demande plusieurs fois. S'il ne passe pas, avertissez l'utilisateur de vérifier la connexion et échouez sans problème .
Sidenote: Pour mettre l'application entière dans un état "hors ligne", cela peut entraîner beaucoup de travail de gestion des erreurs. Les connexions sans fil peuvent aller et venir, etc. Donc, votre meilleur pari peut être de simplement échouer gracieusement, de conserver le données, et alerter l'utilisateur .. leur permettant éventuellement de résoudre le problème de connexion s'il y en a un, et de continuer à utiliser votre application avec une bonne dose de pardon.
Sidenote: Vous pouvez vérifier la connectivité d'un site fiable comme Google, mais cela peut ne pas être entièrement utile car il suffit d'essayer de faire votre propre demande, car même si Google peut être disponible, votre propre application peut ne pas l'être et vous allez toujours devez gérer votre propre problème de connexion. Essayer d'envoyer un ping à Google serait un bon moyen de confirmer que la connexion Internet elle-même est en panne, donc si ces informations vous sont utiles, cela pourrait valoir la peine.
Sidenote : L' envoi d'un ping pourrait être réalisé de la même manière que vous feriez n'importe quelle sorte de demande ajax bidirectionnelle, mais l'envoi d'un ping à google, dans ce cas, poserait des défis. Tout d'abord, nous aurions les mêmes problèmes interdomaines que ceux rencontrés lors des communications Ajax. Une option consiste à configurer un proxy côté serveur, dans lequel nous
ping
Google (ou n'importe quel site), et renvoyons les résultats du ping à l'application. Ceci est un catch-22parce que si la connexion Internet est réellement le problème, nous ne pourrons pas accéder au serveur, et si le problème de connexion ne concerne que notre propre domaine, nous ne pourrons pas faire la différence. D'autres techniques interdomaines pourraient être essayées, par exemple, en incorporant une iframe dans votre page qui pointe vers google.com, puis en interrogeant l'iframe pour la réussite / l'échec (examinez le contenu, etc.). L'intégration d'une image peut ne pas vraiment nous dire quoi que ce soit, car nous avons besoin d'une réponse utile du mécanisme de communication afin de tirer une bonne conclusion sur ce qui se passe. Encore une fois, déterminer l'état de la connexion Internet dans son ensemble peut être plus difficile que cela en vaut la peine. Vous devrez pondérer ces options pour votre application spécifique.la source
IE 8 prendra en charge la propriété window.navigator.onLine .
Mais bien sûr, cela n'aide pas avec d'autres navigateurs ou systèmes d'exploitation. Je prédis que d'autres fournisseurs de navigateurs décideront également de fournir cette propriété étant donné l'importance de connaître l'état en ligne / hors ligne dans les applications Ajax.
Jusqu'à ce que cela se produise, XHR ou une demande
Image()
or<img>
peut fournir quelque chose de proche de la fonctionnalité souhaitée.Mise à jour (2014/11/16)
Les principaux navigateurs prennent désormais en charge cette propriété, mais vos résultats varient.
Citation de la documentation Mozilla :
la source
Presque tous les principaux navigateurs prennent désormais en charge la
window.navigator.onLine
propriété et les événements correspondantsonline
etoffline
window:Essayez de configurer votre système ou votre navigateur en mode hors ligne / en ligne et vérifiez la console ou la
window.navigator.onLine
propriété pour les changements de valeur. Vous pouvez également le tester sur ce site Web .Notez cependant cette citation de la documentation de Mozilla :
(L'accent est le mien)
Cela signifie que si
window.navigator.onLine
estfalse
(ou vous obtenez unoffline
événement), vous êtes assuré d'avoir aucune connexion Internet.Si c'est le cas
true
(ou si vous obtenez unonline
événement), cela signifie seulement que le système est connecté à un réseau, au mieux. Cela ne signifie pas que vous avez accès à Internet par exemple. Pour vérifier cela, vous devrez toujours utiliser l'une des solutions décrites dans les autres réponses.J'avais initialement l'intention de publier cela comme une mise à jour de la réponse de Grant Wagner , mais cela semblait trop éditer, d'autant plus que la mise à jour 2014 n'était pas déjà de lui .
la source
Il y a un certain nombre de façons de le faire:
Vous pouvez mettre un
onerror
dans unimg
, commeCette méthode pourrait également échouer si l'image source est déplacée / renommée, et serait généralement un choix inférieur à l'option ajax.
Il existe donc plusieurs façons différentes d'essayer de détecter cela, aucune parfaite, mais en l'absence de la possibilité de sortir du bac à sable du navigateur et d'accéder directement à l'état de connexion Internet de l'utilisateur, elles semblent être les meilleures options.
la source
la source
L'API HTML5 Application Cache spécifie navigator.onLine, qui est actuellement disponible dans les versions bêtas IE8, WebKit (par exemple Safari), et est déjà pris en charge dans Firefox 3
la source
Vous pouvez utiliser $ .ajax () de »
error
fonction de rappel qui incendies si la demande échoue. SitextStatus
est égal à la chaîne "timeout", cela signifie probablement que la connexion est rompue:Du doc :
Ainsi, par exemple:
la source
Comme l'a dit olliej, l'utilisation de la
navigator.onLine
propriété du navigateur est préférable à l'envoi de requêtes réseau et, en conséquence, avec developer.mozilla.org/En/Online_and_offline_events , elle est même prise en charge par les anciennes versions de Firefox et IE.Récemment, le WHATWG a spécifié l'ajout des événements
online
etoffline
, au cas où vous auriez besoin de réagir surnavigator.onLine
changements.Veuillez également prêter attention au lien publié par Daniel Silveira qui souligne que se fier à ces signaux / propriétés pour la synchronisation avec le serveur n'est pas toujours une bonne idée.
la source
est ce que vous recherchez, mais peu de choses à ajouter, d'abord, si c'est quelque chose sur votre application que vous souhaitez continuer à vérifier (comme pour voir si l'utilisateur se met soudainement hors ligne, ce qui corrige dans ce cas la plupart du temps, alors vous besoin d'écouter le changement également), pour cela vous ajoutez un écouteur d'événements à la fenêtre pour détecter tout changement, pour vérifier si l'utilisateur se déconnecte, vous pouvez faire:
et pour vérifier si en ligne:
la source
onLine
. Les navigateurs définissent l'état d'être en ligne très différemment. Jetez un œil à developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine .J'ai dû faire une application web (basée sur ajax) pour un client qui travaille beaucoup avec les écoles, ces écoles ont souvent une mauvaise connexion internet J'utilise cette fonction simple pour détecter s'il y a une connexion, ça marche très bien!
J'utilise CodeIgniter et Jquery:
la source
un appel ajax vers votre domaine est le moyen le plus simple de détecter si vous êtes hors ligne
c'est juste pour vous donner le concept, il faut l'améliorer.
Par exemple, erreur = 404 devrait toujours signifier que vous êtes en ligne
la source
Je pense que c'est une manière très simple.
la source
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
Je cherchais une solution côté client pour détecter si Internet était en panne ou mon serveur en panne. Les autres solutions que j'ai trouvées semblaient toujours dépendre d'un fichier ou d'une image de script tiers, qui ne me semblait pas résister à l'épreuve du temps. Un script ou une image hébergée externe pourrait changer à l'avenir et entraîner l'échec du code de détection.
J'ai trouvé un moyen de le détecter en recherchant un xhrStatus avec un code 404. De plus, j'utilise JSONP pour contourner la restriction CORS. Un code d'état autre que 404 indique que la connexion Internet ne fonctionne pas.
la source
Mon chemin.
la source
Le problème de certaines méthodes comme
navigator.onLine
est qu'elles ne sont pas compatibles avec certains navigateurs et versions mobiles, une option qui m'a beaucoup aidé était d'utiliser laXMLHttpRequest
méthode classique et de prévoir également le cas possible où le fichier a été stocké dans le cache avec une réponseXMLHttpRequest.status
supérieure à 200 et moins de 304.Voici mon code:
la source
Il y a 2 réponses pour deux sénarios différents: -
Si vous utilisez JavaScript sur un site Web (c'est-à-dire; ou toute partie frontale) La façon la plus simple de le faire est:
Mais si vous utilisez js côté serveur (c.-à-d. Nœud, etc.), vous pouvez déterminer que la connexion est perdue en effectuant des requêtes XHR ayant échoué.
L'approche standard consiste à réessayer la demande plusieurs fois. S'il ne passe pas, avertissez l'utilisateur de vérifier la connexion et échouez sans problème.
la source
tête de requête en erreur de requête
la source
Voici un extrait d'un utilitaire d'aide que j'ai. Il s'agit de javascript à espace de noms:
Vous devriez l'utiliser avec la détection de méthode, sinon lancer une méthode «alternative» pour le faire. Le temps approche à grands pas quand ce sera tout ce qui sera nécessaire. Les autres méthodes sont des hacks.
la source