Détecter la connexion Internet est en mode hors connexion?
Comment détecter la connexion Internet est en mode hors connexion dans le JavaScript?
- Si vous pouvez ou déjà utiliser les websockets - websockets un gros Événement qui doit être appelée si l'utilisateur a perdu la connexion au serveur.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez déterminer que la connexion est perdue en faisant échoué demandes XHR.
L'approche standard est de réessayer la demande à quelques reprises. Si cela ne fonctionne pas, alerte l'utilisateur pour vérifier la connexion, et échouer gracieusement.
Note: De mettre l'ensemble de l'application dans un "hors ligne" de l'état peut conduire à beaucoup de risque d'erreur de travaux de manutention de l'état.. les connexions sans fil peuvent aller et venir, etc. Alors votre meilleur pari peut être simplement de ne pas gracieusement, de préserver les données, et d'alerter l'utilisateur.. leur permettant éventuellement de résoudre le problème de connexion s'il en est, et pour continuer à utiliser votre application avec une bonne quantité de pardon.
Note:, Vous pouvez consulter un site fiable comme google pour la connectivité, mais cela peut ne pas être entièrement utile que juste essayer de faire votre propre demande, parce que, tandis que Google peuvent être disponibles, votre demande ne peut pas être, et vous allez encore avoir à gérer votre propre problème de connexion. Essaie d'envoyer un ping vers google serait un bon moyen pour vérifier que la connexion internet lui-même est en baisse, de sorte que si l'information est utile pour vous, alors il pourrait être en vaut la peine.
Note: l'Envoi d'un Ping pourrait être réalisé de la même manière que vous le feriez n'importe quel type de requête ajax, mais l'envoi d'une commande ping sur google, dans ce cas, serait poser certaines difficultés. Tout d'abord, nous aimerions avoir le même inter-domaine des questions qui sont généralement rencontrés dans la prise Ajax communications. Une option est de mettre en place un serveur proxy côté, où nous avons fait
ping
google (ou autre site), et de retourner les résultats de la commande ping à l'application. C'est un catch-22 parce que si la connexion internet est en fait le problème, nous ne serons pas en mesure d'obtenir sur le serveur, et si le problème de connexion est seulement sur notre propre nom de domaine, nous ne serons pas en mesure de faire la différence. D'autres croix-domaine des techniques pourrait être tenté, par exemple, l'incorporation d'une iframe dans la page qui pointe vers google.com et puis d'interrogation de l'iframe pour la réussite/échec (examiner le contenu, etc). L'incorporation d'une image ne peut pas vraiment dire quoi que ce soit nous, parce que nous avons besoin d'une réponse utile à partir du mécanisme de communication afin d'en tirer une bonne conclusion à propos de ce qu'il se passe. Encore une fois, la détermination de l'état de la connexion internet dans son ensemble peut être plus d'ennuis que cela vaut la peine. Vous devrez poids de ces options pour votre application spécifique.navigator.onLine
est certainement le meilleur maintenant que c'est cross-browser.IE 8 soutiendra la de la fenêtre.navigator.en ligne propriété.
Mais bien sûr, cela ne fonctionne pas avec d'autres navigateurs ou systèmes d'exploitation. Je prédis que d'autres fournisseurs de navigateur va décider de prévoir que la propriété aussi bien, étant donné l'importance de savoir en ligne/hors ligne dans les applications Ajax.
Jusqu'à ce qu'il se passe, soit XHR ou un
Image()
ou<img>
demande peut fournir quelque chose de proche de la fonctionnalité que vous souhaitez.Mise à jour (2014/11/16)
Les principaux navigateurs du marché désormais en charge de cette propriété, mais vos résultats peuvent varier.
Citation de Mozilla Documentation:
Il y a un certain nombre de façons de le faire:
Vous pourriez mettre un
onerror
dans unimg
, commeCette méthode peut également échouer si l'image source est déplacé ou renommé, et serait généralement inférieur choix pour l'ajax option.
Il y a donc plusieurs façons d'essayer et de détecter cela, aucun idéal, mais en l'absence de la capacité de sauter hors du bac à sable navigateur et l'accès de l'utilisateur net état de la connexion directement, ils semblent être les meilleures options.
navigator.onLine
, qui se trouve à Navigateur.en ligne, vous pouvez voir les changements dans l'état du réseau par l'écoute pour les événementswindow.ononline
etwindow.onoffline
.navigator.onLine
fonctionne très bien avec tous les cas d'utilisation.Presque tous les principaux navigateurs prennent désormais en charge la
window.navigator.en ligne
de la propriété, et le correspondant deonline
etoffline
événements de fenêtre:Essayez de régler votre système ou navigateur en mode hors connexion/mode en ligne et de vérifier la console ou le
window.navigator.onLine
propriété pour les changements de valeur. Vous pouvez le tester sur ce site internet ainsi.Toutefois, de noter cette citation de Mozilla Documentation:
(l'emphase est de mon propre)
Cela signifie que si
window.navigator.onLine
estfalse
(ou si vous obtenez unoffline
événement), vous avez une garantie de ne pas avoir de connexion Internet.Si c'est
true
cependant (ou si vous obtenez unonline
cas), 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 devez utiliser l'une des solutions décrites dans les autres réponses.au départ, j'ai prévu de poster ce qu'une mise à jour de Subvention de Wagner répondre, mais il semblait trop d'un montage, d'autant plus que le 2014 mise à jour était déjà pas de lui.
Le HTML5 Cache de l'Application de l'API spécifie navigator.en ligne, qui est actuellement disponible dans la IE8 bêta, WebKit (eg. Safari) nightlies, et est déjà pris en charge dans Firefox 3
Comme olliej dit, à l'aide de la
navigator.onLine
navigateur propriété est préférable que l'envoi des demandes de réseau et, en conséquence, avec developer.mozilla.org/En/Online_and_offline_events, il est même soutenu par d'anciennes versions de Firefox et IE.Récemment, le WHATWG a précisé l'ajout de la
online
etoffline
événements, dans le cas où vous avez besoin de réagir surnavigator.onLine
changements.Veuillez payer aussi l'attention sur le lien posté par Daniel Silveira, qui souligne que le fait de compter sur ceux signal/propriété pour la synchronisation avec le serveur n'est pas toujours une bonne idée.
Vous pouvez utiliser $.ajax()'s
error
de rappel, qui se déclenche si la requête échoue. SitextStatus
est égale à la chaîne de "timeout" cela signifie probablement que la connexion est rompue:De la doc:
Ainsi, par exemple:
J'ai dû faire une application web (ajax) pour un client qui travaille beaucoup avec les écoles, ces écoles ont souvent une mauvaise connexion internet-je utiliser cette fonction simple pour détecter si il y a une connexion, fonctionne très bien!
J'utilise CodeIgniter et Jquery:
un appel ajax de votre nom de domaine est le moyen le plus facile de détecter si vous êtes en mode hors connexion
c'est juste pour vous donner le concept, il devrait être améliorée.
E. g. erreur=404 devrait toujours dire que vous en ligne
Je pense que c'est une manière très simple.
J'ai été à la recherche pour un client-side solution pour détecter si l'internet a été enfoncée ou mon serveur était en panne. Les autres solutions que j'ai trouvé toujours semblé dépend de la 3e partie du fichier de script ou de l'image, ce qui pour moi n'a pas l'air comme si elle résisterait à l'épreuve du temps. Externe hébergé script ou de l'image pourrait changer à l'avenir et la cause de la détection de code à l'échec.
J'ai trouvé un moyen de le détecter par la recherche d'un xhrStatus avec un code 404. En outre, j'utilise JSONP de contourner la restriction de la SCRO. Un code d'état autres que les 404 montre la connexion internet ne fonctionne pas.
est ce que vous recherchez, mais peu de choses à ajouter, tout d'abord, si c'est quelque chose sur votre application dont vous souhaitez garder le contrôle (comme pour voir si l'utilisateur de passer en mode hors connexion, ce qui correct dans ce cas la plupart du temps, alors vous avez besoin d'écouter pour changer aussi), pour que vous ajouter un écouteur d'événement à la fenêtre pour détecter tout changement, pour vérifier si l'utilisateur est hors ligne, vous pouvez le faire:
et de vérifier en ligne:
Mon chemin.
Il y a 2 réponses forthis pour deux senarios:-
Si vous êtes à l'aide de JavaScript sur un site web(je.e; ou toute partie front-end)
La façon la plus simple de le faire est:
Mais si vous êtes en utilisant js côté serveur(j'.e; nœud, etc.), Vous pouvez déterminer que la connexion est perdue en faisant échec de demandes XHR.
L'approche standard est de réessayer la demande un peu de temps. Si cela ne fonctionne pas, alerte à l'utilisateur de vérifier la connexion, et ne parviennent pas gracieusement.
demande la tête dans la demande d'erreur
Le problème de certaines méthodes comme
navigator.onLine
, c'est qu'ils ne sont pas compatibles avec certains navigateurs et les versions mobiles, une option qui m'a beaucoup aidé à utiliser le classiqueXMLHttpRequest
méthode et aussi prévoir la possibilité que le fichier a été stockée dans la mémoire cache à la réponseXMLHttpRequest.status
est supérieur à 200 et inférieur à 304.Voici mon code:
Voici un extrait d'une aide de l'utilitaire que j'ai. C'est préfixée javascript:
Vous devez utiliser cette méthode de détection d'autre à déclencher une "autre" façon de faire cela. Le temps approche rapidement quand ce sera tout ce qui est nécessaire. Les autres méthodes sont des hacks.