Vraag Hoe kan ik de internetverbinding in Phonegap regelmatig controleren?


Ik werk met Phonegap. Ik moet de netwerkverbinding periodiek controleren. Ik krijg eigenlijk wat gegevens van een server. Als er geen verbinding is, moet ik een foutmelding weergeven.

Ik heb het googled en de oplossing gevonden. Maar het is niet oké. Omdat ik de verbinding periodiek moet controleren.

<html>
  <head>
    <title>navigator.network.connection.type Example</title>
    <script type="text/javascript" charset="utf-8" src="phonegap-1.0.0.js"></script>
    <script type="text/javascript" charset="utf-8">
    // Wait for PhoneGap to load
    document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() {
        checkConnection();
    }

    function checkConnection() {
        var networkState = navigator.network.connection.type;
        var states = {};
        states[Connection.UNKNOWN]  = 'Unknown connection';
        states[Connection.ETHERNET] = 'Ethernet connection';
        states[Connection.WIFI]     = 'WiFi connection';
        states[Connection.CELL_2G]  = 'Cell 2G connection';
        states[Connection.CELL_3G]  = 'Cell 3G connection';
        states[Connection.CELL_4G]  = 'Cell 4G connection';
        states[Connection.NONE]     = 'No network connection';
        alert('Connection type: ' + states[networkState]);
    }
    </script>
  </head>
  <body>
    <p>A dialog box will report the network state.</p>
  </body>
</html>

Het controleert alleen de eerste keer dat de toepassing wordt gestart. Maar ik moet het regelmatig controleren, omdat ik socket-programmering aan het doen ben. Als er een probleem is met internet, moet ik het laten zien. Maar deze code wordt alleen weergegeven bij het opstarten.


15
2018-06-29 06:51


oorsprong


antwoorden:


Werk voorbeeld: http://jsfiddle.net/Gajotres/d5XYR/

Gebruik intervaltimer om de internetverbinding elke voorgedefinieerde tijd te controleren. Deze oplossing vereist een HTML5-browser, maar dit is geen probleem, omdat jQuery Mobile al HTML5-browser nodig heeft. In dit geval controleert de timer de internetverbinding elke 100 ms en stelt het eindresultaat in een globale javascriptvariabele.

Alles is afhankelijk van deze regel:

window.navigator.onLine -- it will be false if the user is offline.

Uiteindelijke oplossing:

var connectionStatus = false;

$(document).on('pagebeforeshow', '#index', function () {
    setInterval(function () {
        connectionStatus = navigator.onLine ? 'online' : 'offline';
    }, 100);
    $(document).on('click', '#check-connection', function () {
        alert(connectionStatus);
    });
});

Getest op: 

  • Windows Firefox

  • Windows Google Chrome

  • Windows IE9 en IE10

  • Android 4.1.1 Chrome

  • iPad 3 Safari

  • iPad3 Chrome


26
2018-06-29 07:09



Misschien kunt u de 'online' en 'offline' gebeurtenislisteners op het document gebruiken om uw app op de hoogte te stellen wanneer deze online of offline wordt, zoals beschreven in de documenten, bijvoorbeeld. hier: http://docs.phonegap.com/en/3.2.0/cordova_events_events.md.html#online


6
2017-12-03 13:11



Helaas is het antwoord niet stabiel in Chrome en Safari, evenals in verschillende mobiele browsers. Het geeft u niet de "echte internetverbinding" -status, maar eerder de "status van de netwerkverbinding". Zien:

https://developer.mozilla.org/en-US/docs/Web/API/window.navigator.onLine

"Als in Chrome en Safari de browser geen verbinding kan maken met een lokaal netwerk (LAN) of een router, is deze offline, terwijl alle andere voorwaarden waar retourneren. Dus terwijl u kunt aannemen dat de browser offline is wanneer deze een valse waarde, u kunt er niet vanuit gaan dat een echte waarde noodzakelijkerwijs betekent dat de browser toegang heeft tot internet. U zou mogelijk valse positieven kunnen krijgen, bijvoorbeeld in gevallen waarin de computer een virtualisatiesoftware draait met virtuele ethernetadapters die altijd zijn "verbonden". "Daarom, als je echt de online status van de browser wilt bepalen, zou je extra middelen moeten ontwikkelen om te controleren. Zie voor meer informatie het HTML5 Rocks-artikel Working Off the Grid."

Zie dit HTML5 Rocks-artikel voor een echte stabiele oplossing - meer werk natuurlijk:

http://www.html5rocks.com/en/mobile/workingoffthegrid/


4
2017-08-22 17:56