2015-11-11 24 views
5

Sto lavorando su un'app PhoneGap e ho un problema con l'installazione di un particolare modulo, "Informazioni di rete" (https://github.com/apache/cordova-plugin-network-information). phonegap -v mostra che sto eseguendo la versione 5.3.7Problema con PhoneGap Informazioni sulla rete Plugin su iOS

Tutti gli altri plugin sembrano funzionare correttamente. Questo è un problema nell'applicazione su cui sto lavorando, ma sono anche riuscito a riprodurlo in una nuova applicazione: gli unici due file che ho modificato sono index.html e js/index.js in questo esempio, e lì è alcun file/js cordova.js, che è incluso automaticamente (Cordova Network and Camera API returns undefined)

ho creato l'applicazione utilizzando i seguenti comandi:

phonegap create ios-test 
cd ios-test 
phonegap cordova plugin add cordova-plugin-dialogs 
phonegap cordova plugin add cordova-plugin-network-information 

l'uscita del PhoneGap lista Cordova plugin è:

cordova-plugin-dialogs 1.1.1 "Notification" 
cordova-plugin-network-information 1.0.1 "Network Information" 

Sulla base di un suggerimento here L'ho spostato in una chiamata setTimeout(), ma non sembra fare la differenza.

Ecco il codice HTML (index.html):

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8" /> 
     <meta name="format-detection" content="telephone=no" /> 
     <meta name="msapplication-tap-highlight" content="no" /> 
     <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" /> 
     <link rel="stylesheet" type="text/css" href="css/index.css" /> 
     <title>Hello World</title> 
    </head> 
    <body> 
     <div class="app"> 
     </div> 
     <script type="text/javascript" src="cordova.js"></script> 
     <script type="text/javascript" src="js/index.js"></script> 
     <script type="text/javascript"> 
      app.initialize(); 
     </script> 
    </body> 
</html> 

E il JS:

var app = { 
    initialize: function() { 
     this.bindEvents(); 
    }, 

    bindEvents: function() { 
     document.addEventListener('deviceready', this.onDeviceReady, false); 
    }, 

    onDeviceReady: function() { 
     navigator.notification.alert('Test', null, 'Test', 'OK'); 

     setTimeout(function() { 
      navigator.notification.alert('Debug', null, 'Checking connection', 'OK'); 

      if (navigator.connection == undefined) { 
       navigator.notification.alert('navigator.connection is undefined', null, 'Error', 'OK'); 
       return; 
      } 

      var networkState = navigator.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.CELL]  = 'Cell generic connection'; 
      states[Connection.NONE]  = 'No network connection'; 

      navigator.notification.alert('Network Status', null, 'Connection type: ' + states[networkState], 'OK'); 
     }, 5000); 
    } 
}; 

Al momento l'esecuzione del codice con phonegap serve e l'applicazione dello sviluppatore sul mio iPhone, ho l'Debug avvisare quindi vedere "navigator.connection non è definito".


Ho anche cercato di costruire per iOS:

phonegap platform add ios 

Adding ios project... 
Running command: /Users/James/.cordova/lib/npm_cache/cordova-ios/3.9.2/package/bin/create /Web/ios-test/platforms/ios com.phonegap.helloworld "Hello World" --cli 
iOS project created with [email protected] 
Discovered plugin "cordova-plugin-whitelist" in config.xml. Installing to the project 
Fetching plugin "[email protected]" via npm 
Installing "cordova-plugin-whitelist" for ios 
Installing "cordova-plugin-dialogs" for ios 
Installing "cordova-plugin-network-information" for ios 

Questo crea una cartella platforms/ios, ma ho ancora lo stesso problema.


Ho anche provato:

<feature name="NetworkStatus"> 
    <param name="ios-package" value="CDVConnection" /> 
</feature> 

risposta

4

Non si sta utilizzando correttamente il contesto this. Questo è un errore comune. Il Javascript this NON funziona come Java this.

Il motivo per cui non funziona è perché il this viene risolto a run-time, non assemblare in tempo (o fase di compilazione). Quando l'evento si attiva, this si risolve nel globale this perché l'oggetto app non è più incluso nell'ambito. L'evento si attiva * al di fuori * dell'oggetto app.

Una soluzione rapida sarebbe quella di fare app.onDeviceReady invece di this.onDeviceReady È possibile verificare questo, rendendo il vostro onDeviceReady() una funzione globale e lasciando il this a posto.

OHH e la risposta setTimeout() è qualcuno che non sa che è necessario attendere l'evento deviceready. Il codice errato e i cattivi consigli abbondano nel mondo Javascript.

Questi video dovrebbero aiutare. – Il meglio della fortuna.

+0

Grazie per la vostra risposta, è davvero utile! Con quanto segue, ho ancora 'network.connection is undefined': https://gist.github.com/jfi/14fcff97e8c3c98259aa –

+0

Non faccio CLi, anche se dovrei. Sto usando * [PhoneGap Build] (https://build.phonegap.com/) *. Se non si ottiene l'accesso alla rete, se si utilizza iOS9, è necessario applicare 'CSP' e' ATS'. Il plug-in "whitelist' è stato rimosso a partire da pochi giorni fa. Non ho avuto il tempo di correggere questo post. [COME APPLICARE Cordova/PhoneGap al sistema di whitelist] (https://github.com/jessemonroy650/top-phonegap-mistakes/blob/master/the-whitelist-system.md). Ancora una volta, il plugin 'whitelist' non si applica più a iOS9,' CSP' e 'ATS' sono ancora validi. Best of Luck – JesseMonroy650

+0

@JamesI, vedere i miei commenti al tuo post originale. Il tuo 'config.xml' ha dei problemi. – JesseMonroy650

0

Per chiunque sia interessato, sono riuscito a ge t questo lavoro con PhoneGap Costruire con la seguente:

<gap:plugin name="cordova-plugin-network-information" version="1.0.1" /> 

<feature name="Geolocation"> 
    <param name="ios-package" value="CDVLocation" /> 
</feature> 

Nessuna fortuna con CLI, però, così lasciare questo senza risposta visto che è stata la domanda iniziale (e sarebbe ancora più facile da ottenere che il lavoro).

+0

'' è deprecato. Vedi [# 12] (https://github.com/jessemonroy650/top-phonegap-mistakes/blob/master/new-to-Phonegap.md#012) di [Errori principali di sviluppatori nuovi in ​​Cordova/PhoneGap] (https : //github.com/jessemonroy650/top-phonegap-mistakes/blob/master/new-to-Phonegap.md) Il tuo plug-in avrà esito negativo, non è ora, in futuro, vedi il blog ["PhoneGap 5.2.0 Now Disponibile su Build "] (http://phonegap.com/blog/2015/09/23/phonegap_520_now_on_build/). PREVENTIVO: * "Assicurati anche che i tuoi plugin di terze parti siano tutti aggiornati e che i tuoi plug-in core vengano prelevati da NPM, in questo modo:" * – JesseMonroy650