Phonegapnetworking连接 – 无法读取未定义的属性“types”
我一直在寻找答案,Google的领域一直没有提供任何答案。 我已经尝试了一切,我知道该怎么做,并通过build议的解决scheme和答案,没有任何工作。
简而言之,我试图为Android
和Apple
移动设备开发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"); } }