Vérifier s'il existe une connexion Internet avec Javascript? [dupliquer]

cette question a déjà une réponse ici:

  • détecter la connexion Internet est hors ligne? 16 réponses

Comment vérifier S'il y a une connexion internet utilisant Javascript? De cette façon, je pourrais avoir quelques conditionnels disant "utilisez la version de google Cache de JQuery pendant production, utiliser soit celle-ci, soit une version locale pendant le développement, en fonction de la connexion internet".

196
demandé sur Prakash Pazhanisamy 2010-03-05 05:23:21

9 réponses

la meilleure option pour votre cas spécifique pourrait être:

juste avant votre fermeture </body> tag:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>

c'est probablement la façon la plus facile étant donné que votre question est centrée sur jQuery.

si vous vouliez une solution plus robuste, vous pourriez essayer:

var online = navigator.onLine;

plus d'informations à propos de la spécification du W3C sur les applications web offline , cependant être conscient que cela fonctionnera mieux dans les navigateurs Web modernes, le faire avec les navigateurs Web plus anciens peuvent ne pas fonctionner comme prévu, ou à tous.

alternativement, une requête XHR vers votre propre serveur n'est pas une mauvaise méthode pour tester votre connectivité. Considérant l'une des autres réponses déclarent qu'il ya trop de points d'Échec pour un XHR, si votre XHR est défectueux lors de l'établissement de sa connexion, alors il sera également défectueux lors de l'utilisation de routine de toute façon. Si votre le site est inaccessible pour quelque raison que ce soit, alors vos autres services fonctionnant sur les mêmes serveurs seront probablement inaccessibles aussi. Cette décision dépend de vous.

Je ne recommande pas de faire une demande de XHR au service de quelqu'un d'autre, même google.com d'ailleurs. Faire la demande à votre serveur, ou pas du tout.

Que signifie être "en ligne"?

il semble y avoir une certaine confusion sur ce que signifie être" en ligne". Considérer que l'internet est un bouquet de réseaux, mais parfois vous êtes sur un VPN, sans accès à l'Internet "à grande échelle" ou le World wide web. Souvent les entreprises ont leurs propres réseaux qui ont une connectivité limitée à d'autres réseaux externes, donc vous pourriez être considéré "en ligne". Être en ligne implique seulement que vous êtes connecté au réseau a , et non pas la disponibilité ni la possibilité d'accéder aux services auxquels vous essayez de vous connecter.

pour déterminer si un hôte est accessible depuis votre réseau, vous pouvez le faire:

function hostReachable() {

  // Handle IE and more capable browsers
  var xhr = new ( window.ActiveXObject || XMLHttpRequest )( "Microsoft.XMLHTTP" );
  var status;

  // Open new request as a HEAD to the root hostname with a random param to bust the cache
  xhr.open( "HEAD", "//" + window.location.hostname + "/?rand=" + Math.floor((1 + Math.random()) * 0x10000), false );

  // Issue request and handle response
  try {
    xhr.send();
    return ( xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304) );
  } catch (error) {
    return false;
  }

}

vous pouvez également trouver l'essentiel pour cela ici: https://gist.github.com/jpsilvashy/5725579

détails sur la mise en œuvre locale

certains ont commenté,"Je suis toujours rendu faux". C'est parce que vous le testez probablement sur votre serveur local. Quel que soit le serveur sur lequel vous faites la demande pour, vous devez être en mesure de répondre à la demande HEAD, qui bien sûr peut être changé à OBTENIR si vous le souhaitez.

246
répondu Joseph Silvashy 2015-09-17 19:53:45

Ok, peut-être un peu tard dans le jeu mais qu'en est-il vérifier avec une image en ligne? Je veux dire, L'OP doit savoir s'il a besoin de récupérer le CMD de Google ou la copie JQ locale, mais ça ne veut pas dire que le navigateur ne peut pas lire Javascript quoi qu'il arrive, n'est-ce pas?

<script>
function doConnectFunction() {
// Grab the GOOGLE CMD
}
function doNotConnectFunction() {
// Grab the LOCAL JQ
}

var i = new Image();
i.onload = doConnectFunction;
i.onerror = doNotConnectFunction;
// CHANGE IMAGE URL TO ANY IMAGE YOU KNOW IS LIVE
i.src = 'http://gfx2.hotmail.com/mail/uxp/w4/m4/pr014/h/s7.png?d=' + escape(Date());
// escape(Date()) is necessary to override possibility of image coming from cache
</script>

Just my 2 cents

36
répondu morespace54 2014-02-14 20:03:13

5 ans plus tard-version:

Aujourd'hui, il y a des bibliothèques JS pour vous, si vous ne voulez pas entrer dans les détails des différentes méthodes décrites sur cette page.

L'un de ceux-ci est https://github.com/hubspot/offline . Il vérifie la connectivité D'un URI prédéfini, par défaut votre favicon. Il détecte automatiquement lorsque la connectivité de l'Utilisateur a été rétablie et fournit des événements nets comme up et down , que vous pouvez lier pour mettre à jour votre UI.

12
répondu Phil Rykoff 2015-09-24 22:02:04

vous pouvez imiter la commande Ping.

utilisez Ajax pour demander un timestamp à votre propre serveur, définissez un timer en utilisant setTimeout à 5 secondes, s'il n'y a pas de réponse, essayez à nouveau.

S'il n'y a pas de réponse en 4 tentatives, vous pouvez supposer qu'internet est en panne.

de sorte que vous pouvez vérifier en utilisant cette routine à intervalles réguliers comme 1 ou 3 minutes.

ça me semble une bonne solution.

5
répondu Vitim.us 2012-01-21 16:28:16

vous pouvez essayer en envoyant des requêtes XHR quelques fois, et puis si vous obtenez des erreurs, cela signifie qu'il ya un problème avec la connexion internet.

Edit: j'ai trouvé ce script JQuery qui est en train de faire ce que vous demandez, je n'ai pas le tester.

1
répondu Soufiane Hassou 2010-03-05 02:43:59

j'ai écrit un plugin jQuery pour faire cela. Par défaut, il vérifie L'URL courante (parce que celle-ci est déjà chargée une fois à partir du Web) ou vous pouvez spécifier une URL à utiliser comme argument. Toujours faire une demande à Google n'est pas la meilleure idée parce qu'elle est bloquée dans différents pays à des moments différents. Aussi, vous pourriez être à la merci de ce que la connexion à l'échelle d'un océan/front météorologique/climat politique pourrait être comme le jour.

http://tomriley.net/blog/archives/111

0
répondu tripRev 2012-07-03 13:00:37

envoyer des requêtes XHR est mauvais parce qu'il pourrait échouer si ce serveur particulier est en panne. À la place, utilisez la bibliothèque de l'API googles API pour charger leur(S) version (s) Mise (s) en cache de jQuery.

vous pouvez utiliser l'API googles pour effectuer un rappel après avoir chargé jQuery, et cela vérifiera si jQuery a été chargé avec succès. Quelque chose comme le code ci-dessous devrait fonctionner:

<script type="text/javascript">
    google.load("jquery");

    // Call this function when the page has been loaded
    function test_connection() {
        if($){
            //jQuery WAS loaded.
        } else {
            //jQuery failed to load.  Grab the local copy.
        }
    }
    google.setOnLoadCallback(test_connection);
</script>

la documentation de l'API google peut être trouvée ici .

-3
répondu Mike Trpcic 2010-03-05 02:32:19

j'ai une solution qui travaille ici pour vérifier si la connexion internet existe:

$.ajax({
    url: "http://www.google.com",
    context: document.body,
    error: function(jqXHR, exception) {
        alert('Offline')
    },
    success: function() {
        alert('Online')
    }
})
-3
répondu Mistermika 2017-08-13 13:02:05

une solution beaucoup plus simple:

<script language="javascript" src="http://maps.google.com/maps/api/js?v=3.2&sensor=false"></script>

et plus loin dans le code:

var online;
// check whether this function works (online only)
try {
  var x = google.maps.MapTypeId.TERRAIN;
  online = true;
} catch (e) {
  online = false;
}
console.log(online);

Lorsqu'il n'est pas en ligne le script google ne sera pas chargé résultant d'une erreur où une exception sera levée.

-8
répondu web site maker 2013-07-17 19:06:48