Je suis tombé sur cette erreur et cette question en essayant ce qui suit :
- Complété le tutoriel hello world avec
cordova create
etc.
- Déployé à la fois sur l'émulateur et sur le dispositif connecté sans problème.
- J'ai eu la même erreur que OP en faisant
cordova serve
et de naviguer vers //localhost:8000 comme indiqué.
Je suis d'accord - voir ces alertes est super ennuyeux. Cela tue tout l'intérêt d'un développement rapide et non natif en js.
Qu'est-ce qui ne va pas ?
L'API de communication avec le "dispositif" se rabat sur ce gestionnaire promptbasednativeapi.js (voir aussi cordova-js/src/Android/exec.js ). Dans la version 3.x.x, il suffit de dire
window._cordovaNative = true;
n'était pas suffisant pour moi. Il faut mettre en œuvre l'ensemble du protocole de communication.
Solution rapide
Vous pouvez utiliser un "émulateur" côté navigateur, par exemple. Extension de l'émulateur Ripple pour le chrome. Un tel "émulateur" peut comprendre et déclencher les événements respectifs, par exemple "appareil prêt". Jusqu'à présent, cela semble prometteur :-)
Que se passe-t-il ?
Une réponse de @antscode a été d'une grande aide. Après quelques recherches et la lecture de cordova/cordova-js J'ai compris que le code
- L'erreur provient du mécanisme qui fait partie de l'architecture des plugins de Cordova. Les plugins sont développés sous la forme de ce qu'on appelle commandes cordova qui peut être exécuté à partir de js - c'est exactement comme cela que l'architecture de Cordova est organisée.
- Cordova est un framework JS. Il est suggéré d'écrire principalement du code JS (non natif). Pour parler à tous ces différents plugins natifs, il faut trouver un protocole pour communiquer avec eux, une sorte de RPC avec sérialisation JSON. C'est exactement ce qui se passe.
- Les plugins peuvent également être en JS pur. Pour citer le manuel
Créer un nouveau echome plugin avec :
window.echo = function(str, callback) {
cordova.exec(callback, function(err) {
callback('Nothing to echo.');
}, "Echo", "echo", [str]);
};
Accédez-y comme une commande Cordova via JS :
window.echo("echome", function(echoValue) {
alert(echoValue == "echome"); // should alert true.
});
Pas de solution émulateur
Je pourrais imaginer une situation où une application assez compliquée se briserait juste à l'intérieur d'un tel "émulateur" côté client de navigateur web (et seulement dans celui-ci). Une meilleure solution serait de trouver un moyen de convaincre l'application de ne pas se rabattre sur la méthode de communication PROMPT (celle qui génère des alertes ennuyeuses). Je ne dispose pas d'une telle solution pour l'instant :-( Mais je serais heureux d'apprendre à le faire.
La solution est ici : https://gist.github.com/ewiger/7d5e0cc8fccf311e9ce2