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);
});
}
}
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
Vous devez vous connecter pour publier un commentaire.
Vous souhaitez utiliser le plugin trouvé ici: http://build.phonegap.com/plugins/626
Ceci est spécifique à la
PhoneGap Build
service en ligne. Si vous êtes à la construction localement, au lieu d'ajouter quelque chose àconfig.xml
exécutercordova plugin add org.apache.cordova.network-information
et puiscordova build
dans votre répertoire de projet.OriginalL'auteur Dawson Loudon
J'ai posté cette idée ici déjà: https://stackoverflow.com/a/19319817/2390075
Ce que j'ai remarqué, c'est que
networkState
n'obtient pas toujours directement initialisé.Donc ce qui a fonctionné pour moi, c'est l'ajout d'un petit délai après vérification de l'état d'abord, puis en cochant à nouveau, dans votre cas, il devrait ressembler à ceci:
networkState = navigator.connection && navigator.connection.type;
et d'alertenetworkState
il signale queundefined
et quand je viens de l'utilisernetworkState = navigator.connection.type;
j'obtiens le même résultat que mon post original.OriginalL'auteur benka
Réponse tardive, mais cela a fonctionné parfaitement pour moi:
OriginalL'auteur Faraz Kelhini