Vérifiez la connexion Internet dans Android WebView (Cordova)

Je sais qu'il y a beaucoup de questions et de réponses à ce sujet dans Stackoverflow, j'ai beaucoup lu, mais aucun d'entre eux ne fonctionne.

J'ai clarifié dans le titre Android WebView car c'est la cible la plus importante, mais j'aimerais que cela fonctionne aussi dans d'autres appareils. J'ai testé le code suivant sur une application créée avec Intel XDK installé sur un SM-G355M avec Android 4.4.2 et sur Safari installé sur un iPhone 5C avec iOS 9.3.4 ;

  • Android ImageButton comment avoir une zone cliquable qui est plus grande que l'image elle-même?
  • Meilleure option pour stocker le nom d'utilisateur et le mot de passe dans l'application Android
  • Comment éviter d'apparaître automatiquement le clavier Android lorsque l'activité commence
  • DialogFragment en plein écran avec StatusBar translucide
  • L'Android ART prend-il en charge le chargement dynamique de classes d'exécution comme Dalvik?
  • Eclipse entre dans la classe dans Android
  • Tout ce que je reçois dans les deux cas est la même valeur, true (parfois je suis false même si j'ai une connexion Internet).

    J'ai essayé:

    1. navigator.onLine , il donne toujours la même valeur.
    2. document.addEventListener("online", ... ne déclenche pas
    3. ajax ne fonctionne pas, de toute façon n'affecte-t-il pas le serveur?

    Code: https://nanilab.com/stackoverflow/webview-internet-connection.php


    Option 1 :

     function option1(){ var isOffline = 'onLine' in navigator && !navigator.onLine, text = isOffline == true ? ' without connection ' : ' connected '; $('.option-one span').text(text); $('.option-one i').text('checked').hide().fadeIn(200); setTimeout(function(){ option1(); }, 1000); } 

    Option 2 :

     window.addEventListener("offline", function(){ $('.option-two span').text(' without connection'); }, false); window.addEventListener("online", function(){ $('.option-two span').text(' connected'); }, false); 

    Option 3 :

     function option3(){ $.ajax({ url: '/stackoverflow/blank.php', success: function(data){ print(' connected '); }, error: function(jqXHR, textStatus, error) { print(' without connection '); } }); function print(text){ $('.option-three span').text(text); $('.option-three i').text('checked').hide().fadeIn(200); setTimeout(function(){ option3(); }, 2000); } } 

    Application créée avec Intel XDK installé sur un SM-G355M avec Android 4.4.2

    Https://youtu.be/wHJHG5dP_eM


    Qu'est-ce que je fais mal?

  • Dois-je utiliser setDaemon () dans Android?
  • Run-as: Impossible de définir les fonctionnalités: opération non autorisée
  • Fond de toast changeant pour correspondre au thème de l'activité
  • Existe-t-il un moyen de contrôler les vues à l'intérieur de l'en-tête NavigationView?
  • Exception de pointeur nul dans la fenêtre contextuelle des suggestions sur Samsung Galaxy Android 7
  • Affichage du message de toast à partir d'un fil
  • 2 Solutions collect form web for “Vérifiez la connexion Internet dans Android WebView (Cordova)”

    Apache Cordova (appelé PhoneGap) est un framework de développement mobile open-source . Il vous permet d'utiliser des technologies Web standard – HTML5, CSS3 et JavaScript pour le développement multiplateforme . Les applications s'exécutent dans des enveloppes ciblées sur chaque plate-forme et s'appuient sur des liaisons API conformes aux normes pour accéder aux capacités de chaque appareil, telles que les capteurs, les données, l' état du réseau , etc.

    Dans votre problème (Option 1):

     navigator.onLine 

    ne fonctionne pas parce que (sur Android) il est cassé (la version "brute", la visualisation web corrigée de Cordova est différente} (comme vous l'avez découvert), vous devez créer votre application WebView avec Cordova Framework . Cordova a été développé EXACTEMENT pour résoudre ce problème. Le GAP dans PhoneGap est l'écart entre la «machine virtuelle», le «sandbox» et l'accès au matériel, et c'est une plate-forme croisée.

    Autorisations Android: application / AndroidManifest.xml

     <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

    Permissions de Cordova: app / res / xml / config.xml

     <feature name="NetworkStatus"> <param name="android-package" value="org.apache.cordova.networkinformation.NetworkManager" /> </feature> 

    Guide rapide Installation de Cordova

    Goto page web pour les instructions d'installation

    https://cordova.apache.org/docs/fr/latest/guide/cli/

    Goto page web et télécharger nodejs pour votre système

    https://nodejs.org/fr/download/

    Exemple de fichier

     node-v4.5.0-x86.msi 

    Exécutez (installez-le)

     success. 

    Sur Windows:

     C:\>npm install -g cordova 

    Et vous partez vous!

    J'ai été construit votre code dans cordova, j'arrive (j'espère, problème difficile), voici quelques images de ce que j'ai jusqu'ici [pas encore dans WebView {voir la sortie navigator.userAgent dans la deuxième image} ] (Notez que l'auditeur d'événement fonctionne, O), mais pas assez bon: o (). Où sont tous les programmeurs Cordova? J'ai entendu parler de Cordova la semaine dernière:

    Image de démonstration hors ligne Image de démonstration en ligne

    Dans Chrome et Safari, si le navigateur ne peut pas se connecter à un réseau local (LAN) ou à un routeur, il est hors connexion; Toutes les autres conditions sont vraies. Donc, alors que vous pouvez supposer que le navigateur est hors-ligne lorsqu'il renvoie une fausse valeur, vous ne pouvez pas supposer qu'une valeur réelle signifie nécessairement que le navigateur peut accéder à Internet. Vous pouvez obtenir des faux positifs, par exemple dans le cas où l'ordinateur exécute un logiciel de virtualisation doté d'adaptateurs ethernet virtuels qui sont toujours "connectés". Par conséquent, si vous souhaitez vraiment déterminer le statut en ligne du navigateur, vous devriez développer des moyens supplémentaires pour le contrôle. Pour en savoir plus, consultez l'article HTML5 Rocks, http://www.html5rocks.com/fr/mobile/workingoffthegrid/

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.