Phonegap Connexion Réseau, Impossible de lire la propriété "type" undefined

J'ai été la recherche autour de tous les jours pour la réponse à cette et le Google de la sphère n'a pas fourni de réponses. J'ai essayé tout ce que je sais faire et a travaillé à travers les solutions proposées et les réponses, et rien n'a fonctionné.

En un mot, je suis en train de développer un Phonegap application pour Android et Apple périphériques Mobiles et l'une des fonctionnalités dont j'ai besoin est de détecter à la fois l'état du réseau et le type de connexion réseau. Ci-dessous le code que j'utilise.

La Firing device ready alerte déclenche et puis j'ai l'erreur Cannot read property 'type' of undefined suivie par la boucle par le biais de la Navigator objet. Comme je l'ai passer à travers chacune de ces propriétés de l'objet, je ne vois pas le connection propriété ou même la network propriété a été utilisée dans les anciennes versions.

Quelqu'un a des idées?

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

Et dans mon config.xml j'ai:

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

MISE À JOUR : SOLUTION

Une solution a finalement été formulée par les efforts combinés de @Dawson Loudon et @la mère, benka. Dawson corrigé le plugin que j'utilisais qui aurait dû être:

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

Et cela fonctionne correctement uniquement après la mise en œuvre du court délai mentionné par @la mère, benka. Alors maintenant, le code de travail ressemble à ça en 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);
        });
    }
}
construisez-vous localement ou à l'build.phonegap.com ?
build.phonegap.com
Vous souhaitez utiliser le plugin trouvé ici: build.phonegap.com/plugins/626 <gap:plugin name="org.apache.cordova.network-information" version="0.2.7" />
Toi, mon ami, sont génial! Qui a fait le tour. Vous devriez poster une réponse pour certains plus de réputation. Mais de toute façon, je vous remercie beaucoup.
Excellente solution, je suis face au même problème lors de mon navigateur.connexion.type parfois indéfini quand j'ai accédez à une autre page. Après la mise en œuvre de la setTimeout chose maintenant, il semble que la question n'est plus là. Merci!

OriginalL'auteur The Duke Of Marshall שלום | 2014-09-04