Vraag Controleer of de internetverbinding bestaat met Javascript? [duplicaat]


Deze vraag heeft hier al een antwoord:

Hoe controleer je of er een internetverbinding is met Javascript? Op die manier zou ik een aantal conditionals kunnen hebben die zeggen "gebruik de Google-gecachte versie van JQuery tijdens de productie, gebruik die of een lokale versie tijdens de ontwikkeling, afhankelijk van de internetverbinding".


194
2018-03-05 02:23


oorsprong


antwoorden:


De beste optie voor uw specifieke geval kan zijn:

Vlak voor je sluiten </body> label:

<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>

Dit is waarschijnlijk de gemakkelijkste manier gezien het feit dat uw probleem zich concentreert rond jQuery.

Als je een meer robuuste oplossing wilde, zou je het volgende kunnen proberen:

var online = navigator.onLine;

Lees meer over de W3C's specificatie voor offline web-appsHoud er echter rekening mee dat dit het beste werkt in moderne webbrowsers, omdat dit met oudere webbrowsers mogelijk niet werkt zoals verwacht of helemaal niet werkt.

Als alternatief is een XHR-verzoek naar uw eigen server niet zo slecht voor een methode om uw connectiviteit te testen. Gezien een van de andere antwoorden stelt dat er te veel faalpunten zijn voor een XHR, als uw XHR gebrekkig is bij het tot stand brengen van de verbinding, dan is deze ook gebrekkig tijdens routinegebruik. Als uw site om welke reden dan ook onbereikbaar is, zijn uw andere services die op dezelfde servers worden uitgevoerd waarschijnlijk ook onbereikbaar. Die beslissing is aan jou.

Ik zou niet aanbevelen om een ​​XHR-verzoek in te dienen bij de service van iemand anders, zelfs google.com. Maak de aanvraag naar uw server, of helemaal niet.

Wat betekent het om "online" te zijn?

Er lijkt wat verwarring te bestaan ​​over wat 'online' betekent. Bedenk dat internet een heleboel netwerken is, maar soms zit u op een VPN, zonder toegang tot internet "in het algemeen" of op het world wide web. Vaak hebben bedrijven hun eigen netwerken die beperkte connectiviteit met andere externe netwerken hebben, daarom zou je als "online" kunnen worden beschouwd. Online zijn houdt alleen in dat je verbonden bent met een netwerk, niet de beschikbaarheid of bereikbaarheid van de services waarmee u verbinding probeert te maken.

Om te bepalen of een host bereikbaar is vanuit uw netwerk, kunt u dit doen:

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;
  }

}

Je kunt hier ook de Gist voor vinden: https://gist.github.com/jpsilvashy/5725579

Details over lokale implementatie

Sommige mensen hebben opgemerkt: "Ik word altijd fout teruggestuurd". Dat komt omdat je het waarschijnlijk op je lokale server test. Op welke server u ook een verzoek indient, u moet kunnen reageren op het HEAD-verzoek, dat u uiteraard ook kunt wijzigen in een GET.


245
2017-11-09 22:43



Ok, misschien een beetje laat in de game, maar hoe zit het met het controleren van een online afbeelding? Ik bedoel, het OP moet weten of hij de Google CMD of de lokale JQ-kopie moet pakken, maar dat betekent niet dat de browser Javascript niet kan lezen, nietwaar?

<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>

Alleen mijn 2 cent


35
2018-03-05 02:31



5 jaar later-versie:

Tegenwoordig zijn er JS-bibliotheken voor u, als u niet wilt ingaan op de details van de verschillende methoden die op deze pagina worden beschreven.

Een daarvan is https://github.com/hubspot/offline. Het controleert de connectiviteit van een vooraf gedefinieerde URI, standaard uw favicon. Het detecteert automatisch wanneer de connectiviteit van de gebruiker is hersteld en biedt nette evenementen zoals up en down, waaraan u kunt binden om uw gebruikersinterface bij te werken.


12
2018-01-21 16:28



U kunt het Ping-commando nabootsen.

Gebruik Ajax om een ​​tijdstempel op te vragen naar uw eigen server, een timer te definiëren met behulp van setTimeout tot 5 seconden, als er geen reactie is, probeert u het opnieuw.

Als er geen reactie is in 4 pogingen, kunt u veronderstellen dat internet niet werkt.

U kunt dus met deze routine regelmatig, zoals 1 of 3 minuten, controleren.

Dat lijkt mij een goede en schone oplossing.


5
2018-03-05 02:27



U kunt proberen door XHR-verzoeken een paar keer te verzenden en als u dan fouten krijgt, betekent dit dat er een probleem is met de internetverbinding.

Bewerk:  ik vond dit JQuery-script wat doet wat je vraagt, ik heb het niet getest.


1
2018-05-25 18:51



Ik heb hiervoor een jQuery-plug-in geschreven. Standaard wordt de huidige URL gecontroleerd (omdat die al één keer van internet is geladen) of u kunt een URL opgeven die u als argument wilt gebruiken. Altijd een verzoek indienen bij Google is niet het beste idee, omdat het op verschillende tijdstippen in verschillende landen is geblokkeerd. Ook ben je misschien overgeleverd aan wat de connectie tussen een bepaald oceaan / weerfront / politiek klimaat zou kunnen zijn zoals die dag.

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


0
2018-03-05 02:32



Het verzenden van XHR-aanvragen is slecht omdat het kan mislukken als die specifieke server niet beschikbaar is. Gebruik in plaats daarvan de API-bibliotheek van googles om de cache-versie (s) van jQuery te laden.

U kunt de googles API gebruiken om een ​​callback uit te voeren na het laden van jQuery, en dit zal controleren of jQuery succesvol is geladen. Iets als de onderstaande code zou moeten werken:

<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>

De documentatie van de Google API is te vinden hier.


-3
2018-01-30 15:16



ik heb een oplossing die hier werkt om te controleren of er een internetverbinding bestaat:

$.ajax({
    url: "http://www.google.com",
    context: document.body,
    error: function(jqXHR, exception) {
        alert('Offline')
    },
    success: function() {
        alert('Online')
    }
})

-3
2017-07-17 19:06



Een veel eenvoudigere oplossing:

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

en later in de 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);

Als het niet online is, wordt het google-script niet geladen, wat resulteert in een fout waarbij een uitzondering wordt gegenereerd.


-8