Phonegapnetworking连接 – 无法读取未定义的属性“types”

我一直在寻找答案,Google的领域一直没有提供任何答案。 我已经尝试了一切,我知道该怎么做,并通过build议的解决scheme和答案,没有任何工作。

简而言之,我试图为AndroidApple移动设备开发Phonegap应用程序,我需要的function之一是检测networking状态和networking连接的types。 以下是我正在使用的代码。

Firing device ready警报触发,然后我得到错误Cannot read property 'type' of undefined然后循环Navigator对象。 当我通过对象的这些属性时,我没有看到connection属性,甚至在旧版本中使用的network属性。

有人有主意吗?

的index.html

 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- jQuery Core --> <script src="js/jquery-1.11.1.min.js"></script> <!-- The main engine for the software. --> <script src="js/main.js"></script> <!-- Third party plugins --> <script type="text/javascript" src="cordova.js"></script> <script type="text/javascript" src="barcodescanner.js"></script> <script type="text/javascript" src="childbrowser.js"></script> <script type="text/javascript" src="js/barcode.js"></script> <title>index</title> <script> document.addEventListener("deviceready", onDeviceReady, false); </script> </head> <body> <script> barcode_app.initialize(); </script> </body> </html> 

main.js

 function onDeviceReady(){ alert('Firing device ready'); try{ 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.NONE] = 'No network connection'; $("#system_popup").html('Connection type: ' + states[networkState]); $("#system_popup").popup("open") //alert('Connection type: ' + states[networkState]); }catch(e){ alert(e); $.each(navigator, function(key, value){ alert(key+' => '+value); }); } } 

在我的config.xml中有:

 <plugin name="NetworkStatus" value="org.apache.cordova.NetworkManager" /> <gap:config-file platform="android" parent="/manifest"> <uses-permission name="android.permission.ACCESS_NETWORK_STATE" /> </gap:config-file> <gap:config-file platform="android" parent="/manifest"> <uses-permission name="android.permission.INTERNET" /> </gap:config-file> <gap:config-file platform="android" parent="/manifest"> <uses-permission name="android.permission.READ_PHONE_STATE" /> </gap:config-file> <feature name="http://api.phonegap.com/1.0/device" /> <feature name="NetworkStatus"> <param name="android-package" value="org.apache.cordova.NetworkManager" /> <param name="ios-package" value="CDVConnection" /> </feature> 

更新:解决scheme

最终通过@Dawson Loudon和@benka的共同努力,形成了一个解决scheme。 道森纠正了我使用的应该是这样的插件:

 <gap:plugin name="org.apache.cordova.network-information" version="0.2.7" /> 

这实际上只有在执行@benka提到的短暂延迟后才能正常工作。 所以现在在JavaScript中看起来像这样的工作代码:

 function onDeviceReady(){ try{ var networkState = navigator.connection && navigator.connection.type; setTimeout(function(){ networkState = navigator.connection && 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.NONE] = 'No network connection'; alert('Connection type: ' + states[networkState]); }, 500); }catch(e){ alert(e); $.each(navigator, function(key, value){ alert(key+' => '+value); }); } } 

你想使用这里find的插件: http : //build.phonegap.com/plugins/626

 <gap:plugin name="org.apache.cordova.network-information" version="0.2.7" /> 

我已经在这里发布了这个想法: https : //stackoverflow.com/a/19319817/2390075

我注意到, networkState并不总是立即被初始化。 所以对我来说,在检查状态之后再加一个小的延迟,然后再检查一次,你的情况应该是这样的:

 var networkState = navigator.connection && navigator.connection.type; setTimeout(function(){ networkState = navigator.connection && 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.NONE] = 'No network connection'; $("#system_popup").html('Connection type: ' + states[networkState]); $("#system_popup").popup("open") //alert('Connection type: ' + states[networkState]); }, 500); 

迟到的答案,但这对我来说是完美的:

 document.addEventListener("deviceready", onDeviceReady, false); // device APIs are available function onDeviceReady() { if(navigator.network.connection.type == Connection.NONE){ alert("nocon"); }else{ alert("yescon"); } }