2015-11-11 17 views
5

私はPhoneGapアプリケーションで作業しており、特定のモジュールである「ネットワーク情報」(https://github.com/apache/cordova-plugin-network-information)のインストールに問題があります。 phonegap -vは私が5.3.7を実行していることを示していますiOSのPhoneGapネットワーク情報プラグインに関する問題

他のすべてのプラグインは正常に動作しているようです。これは私が取り組んでいるアプリケーションの問題ですが、新しいアプリケーションでそれを再現することもできました。私が変更したファイルは、この例ではindex.htmlとjs/index.jsだけです。 は

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

PhoneGapのコルドバのプラグインリストの出力は次のとおりです:自動的に含まれるいかなるJS/cordova.jsファイルには、私は次のコマンドを使ってアプリを作成しました( Cordova Network and Camera API returns undefined

ではありません

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

提案に基づいてhere私はこれをsetTimeout()呼び出しでラップしましたが、違いはありません。

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

そして、JS:ここ

は、HTML(index.htmlを)です

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

phonegap serveとのコードと私のiPhoneの開発者のアプリを実行している時に、私はデバッグを取得します"navigator.connection is undefined"を参照してください。


私はまた、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 

これはplatforms/iosフォルダを作成しますが、私はまだ同じ問題を持っています。


私も試してみた:

ARCをチェック
<feature name="NetworkStatus"> 
    <param name="ios-package" value="CDVConnection" /> 
</feature> 

答えて

4

。これはよくある間違いです。 Javascript thisはJava thisのようには機能しません。thisは、実行時ではない組み立て時(またはコンパイル時)を解決しますので

それが動作しない理由があります。イベントが発生すると、appオブジェクトが現在有効範囲外になっているため、thisはグローバルthisに解決されます。このイベントは、あなたのappオブジェクトの* outside *を起動します。

クイックフィックスは、あなたがあなたのonDeviceReady()グローバル関数を作成し、所定の位置にthisを残すことによってこれをテストすることができます代わりにthis.onDeviceReadyapp.onDeviceReadyを行うことであろう。

OHHそして、setTimeout()答えは、彼らがdevicereadyイベントを待つ必要があるかどうかわからない人です。悪いコードと悪いアドバイスがJavascriptの世界にたくさんあります。

これらのビデオが役立ちます。 –幸運のベスト。興味のある人は、私はGEに管理しなかったため

+0

ご回答いただきありがとうございます。本当に便利です!以下では、私はまだ 'network.connection is undefined'を取得します:https://gist.github.com/jfi/14fcff97e8c3c98259aa –

+0

私はCLiをやっていません。私は* [Phonegap Build](https://build.phonegap.com/)*を使っています。ネットワークにアクセスできない場合は、iOS9を使用している場合は、 'CSP'と' ATS'を適用する必要があります。ホワイトリストプラグインは数日前に削除されました。私はこの記事を修正する時間がなかった。 [Cordova/Phonegapホワイトリストシステムの適用方法](https://github.com/jessemonroy650/top-phonegap-mistakes/blob/master/the-whitelist-system.md)再び、ホワイトリストプラグインはiOS9にのみ適用され、 'CSP'と' ATS'はまだ有効です。幸運のベスト – JesseMonroy650

+0

@ジェームス私のコメントを元の投稿に見なさい。あなたの 'config.xml'には問題があります。 – JesseMonroy650

0

それは、元の質問をしたように、この未回答を残して、しかしCLIで

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

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

運を(そしてまだその作業を取得するために容易になるだろう):トンのPhoneGapでの作業これは、以下の使用してビルドします。

+0

''は推奨されていません。 [Cordova/Phonegap初心者の開発者によるトップミス]の[#12](https://github.com/jessemonroy650/top-phonegap-mistakes/blob/master/new-to-Phonegap.md#012)(https ://github.com/jessemonroy650/top-phonegap-mistakes/blob/master/new-to-Phonegap.md)あなたのプラグインは失敗するでしょう、今は、将来はありません。ブログ["PhoneGap 5.2.0 Now利用可能なビルド "](http://phonegap.com/blog/2015/09/23/phonegap_520_now_on_build/)。引用:* "また、サードパーティのプラグインがすべて最新のものであること、そしてあなたのコアプラグインがNPMから供給されていることを確認してください:" * – JesseMonroy650

関連する問題