2014-09-04 107 views
9

我一直在尋找答案,並且Google-sphere沒有提供任何答案。我已經嘗試了一切,我知道該怎麼做,並通過建議的解決方案和答案,沒有任何工作。Phonegap網絡連接 - 無法讀取未定義的屬性'type'

概括地說,我試圖建立一個Phonegap應用爲AndroidApple移動設備和我需要的是同時檢測網絡狀態和網絡連接類型的功能之一。以下是我正在使用的代碼。

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> 










UPDATE:解決方案

解決辦法,可以@Dawson勞登和@benka的共同努力終於制定。道森糾正我用這本來應該是插件:

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

你在本地或build.phonegap.com建設? – 2014-09-04 19:13:55

+0

build.phonegap.com – 2014-09-04 19:14:24

+2

你想使用這裏找到的插件:https://build.phonegap.com/plugins/626'' – 2014-09-04 19:15:25

回答

6

你想使用這裏找到插件:http://build.phonegap.com/plugins/626

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

要安裝這個是需要在控制檯上運行一些命令嗎?或者只添加到config.xml – 2015-02-13 04:08:54

+0

這是特定於'PhoneGap Build'在線服務。如果您在本地構建,而不是向'config.xml'添加任何內容,請在您的本地項目目錄中運行'cordova plugin add org.apache.cordova.network-information',然後運行'cordova build'。 – 2015-02-13 06:01:32

2

我已經在這裏張貼了這個想法已經: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); 
+2

感謝您的建議。我嘗試了你正在談論的內容,甚至在不同的變體中使用你的鏈接答案,但不幸的是我仍然得到相同的結果。當我使用'networkState = navigator.connection && navigator.connection.type;'並提醒'networkState'時,它會報告爲'undefined',而當我使用'networkState = navigator.connection.type;'時,我得到和我一樣的結果原來的帖子。 – 2014-09-04 18:52:20

1

晚的答案,但這個工作非常適合我:

document.addEventListener("deviceready", onDeviceReady, false); 

// device APIs are available 
function onDeviceReady() { 
    if(navigator.network.connection.type == Connection.NONE){ 
     alert("nocon"); 
    }else{ 
     alert("yescon"); 
    } 
} 
+0

我只是缺少一個「=」(即使用「=」而不是「==」)。這篇文章清除了它。 – Zeni 2015-12-26 17:20:28

相關問題