问题与iOS上的PhoneGapnetworking信息插件

我正在开发PhoneGap应用程序,并且在安装一个特定的模块“networking信息”( https://github.com/apache/cordova-plugin-network-information )时遇到了问题。 phonegap -v显示我正在运行版本5.3.7

所有其他插件似乎工作正常。 这是我正在处理的应用程序中的一个问题,但我也设法在一个新的应用程序中重现它:在这个例子中,我只改变了两个文件index.html和js / index.js,是没有js / cordova.js文件,这是自动包括( cordovanetworking和相机API返回未定义 )

我已经使用以下命令创build了应用程序:

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

phonegap cordova插件列表的输出是:

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

基于这里的一个build议,我用setTimeout()调用来包装这个,但是这似乎没有什么区别。

这里是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> 

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

在iPhone上运行phonegap serve和开发者应用程序的代码后,我得到Debug警报,然后看到“navigator.connection is undefined”。


我也试过为iOS构build:

 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 cordova-ios@3.9.2 Discovered plugin "cordova-plugin-whitelist" in config.xml. Installing to the project Fetching plugin "cordova-plugin-whitelist@1" via npm Installing "cordova-plugin-whitelist" for ios Installing "cordova-plugin-dialogs" for ios Installing "cordova-plugin-network-information" for ios 

这将创build一个platforms/ios文件夹,但我仍然有同样的问题。


我也试过:

  • 检查ARC是否启用, iOS8电话cordovanetworking信息应用程序崩溃

  • 将以下内容添加到config.xml 使用Cordova Phonegap 3.3.0检查iOS应用程序上的Internet连接不工作 :

 <feature name="NetworkStatus"> <param name="ios-package" value="CDVConnection" /> </feature> 
  • 使用navigator.network.connection.type而不是使用Cordova Phonegap 3.3.0在iOS应用程序上检查互联网连接
  • 检查AudioToolbox.framework和SystemConfiguration.framework都添加: Cordovanetworking插件不build立在iOS

你没有正确使用this上下文。 这是一个常见的错误。 JavaScript this不工作像Java this

它不工作的原因是因为this运行时得到解决,而不是组装时间 (或编译时 )。 当事件触发时, this将解决到全局,因为你的app对象现在超出了范围。 事件触发* app对象的*外部。

一个快速的解决办法是做app.onDeviceReady而不是this.onDeviceReady你可以testing这个你的onDeviceReady()一个全局函数,并离开this地方。

OHH, setTimeout()答案是不知道他们需要等待设备deviceready事件的人。 糟糕的代码和不好的build议比比皆是的Javascript世界。

这些video应该有帮助。 – 祝你好运

  • JavaScript中的上下文 – 1/4 – JavaScript的“This”的目的和问题

  • JavaScript中的上下文 – 2/4 – JavaScript如何判断“实际上”是什么?

  • 在JavaScript中的上下文 – 3/4 – “这”可能不是你所期望的和如何修复它

  • 在JavaScript中的上下文 – 4/4 – 掌握“这个:”其他技术和未来的支持

对于任何有兴趣的人,我确实设法使用以下方法使用PhoneGap Build:

 <gap:plugin name="cordova-plugin-network-information" version="1.0.1" /> <feature name="Geolocation"> <param name="ios-package" value="CDVLocation" /> </feature> 

虽然CLI没有运气,所以留下这个没有答案,因为这是原来的问题(而且仍然会更容易得到这个工作)。