Pourquoi ne Cordova 2.7.0 JS apparemment plus travailler à distance sur des pages?
Fond
Je vais tenter la mise à jour d'une application iOS construit sur Cordova 2.0 à la version 2.7.
C'est essentiellement un écran de bienvenue que les points à distance à un moteur de recherche (veuillez retenir des commentaires sur l'app validité et susceptibles d'approbation, tant que nous sommes passé), et nous avons été à l'aide de la ChildBrowser plugin pour permettre l'ouverture des liens dans un sous navigateur de manière à ne pas bloquer l'utilisateur dans le Cordova webview.
Cordova 2.7 a une fonctionnalité appelée InAppBrowser je suis l'espoir de l'utiliser à la place de ChildBrowser. InAppBrowser fait essentiellement la même chose, à part de passer à côté d'un bouton pour ouvrir dans Safari.
Problème
L'application existante à distance de pages web comprennent les Cordova JS (ainsi que pour le ChildBrowser plugin) et il fonctionne très bien pour l'ouverture des liens dans la sous navigateur.
Mon test de Cordova 2.7 application ne semble pas charger le Cordova JS correctement quand il est chargé à partir d'une page web distante.
J'ai essayé d'utiliser exactement le même code HTML sur l'embedded page de démarrage et de démarrage à distance à la page:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="http://mydomain.com/mobile/cordova-2.7.0.js"></script>
</head>
<body>
<script>
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
alert("Ready!!");
}
</script>
</body>
</html>
Pour tester ce que l'embedded page de démarrage, j'ai mis cette ligne dans config.xml
:
<content src="index.html" />
Quand je lance l'application, j'ai rapidement obtenir le "Prêt!" alerte.
Pour tester ce que le démarrage à distance de la page (je vise à lien de la télécommande à la page de l'appli finale, je suis en train de l'utiliser comme page de démarrage pour les tests. Le résultat est le même si j'ai le lien de la page intégrée.), J'ai mis cette ligne dans config.xml
:
<content src="http://mydomain.com/mobile/index.php" />
Quand je lance l'application, je viens d'obtenir le vide de l'écran et aucune alerte.
En outre, dans cordova-2.7.0.js
L. 6255, j'ai changé
console.log('deviceready has not fired after 5 seconds.');
à
alert('deviceready has not fired after 5 seconds.');
Avec cette modification, l'exécution de l'application à l'aide de la télécommande page de démarrage les causes de la page blanche, puis au bout de cinq secondes, je reçois l'alerte "deviceready a pas viré au bout de 5 secondes.". Donc, cela me dit Cordova JS ne démarre pas correctement. Inutile de dire, je ne peux pas obtenir InAppBrowser de lancer des liens dans la sous navigateur sur le site distant, mais je peux le faire fonctionner très bien intégré à la page de démarrage.
N'importe qui ont des idées de l'endroit où aller à partir d'ici? C'est un joli exemple simpliste, donc je suppose que c'est un Cordova problème de paramètres ou d'une modification de la fonctionnalité. J'apprécie toutes les pensées, merci!
- Je viens de tester avec Cordova 2.6, et cette configuration exacte avec 2,6 fonctionne très bien. Le Cordova JS fonctionne sur la télécommande pages. Si quelque chose a changé dans 2,7 à briser ce.
- Cela semble lié, mais avec la version précédente, donc c'est un peu étrange: issues.apache.org/jira/browse/CB-3029
Vous devez vous connecter pour publier un commentaire.
Oui, quelque chose s'est cassé dans 2,7 liées à notre cordova-cli de travail. Voir: https://issues.apache.org/jira/browse/CB-3029
La solution est d'ajouter un fichier vide appelé "cordova_plugins.json" dans votre dossier racine.
cordova_plugins.json
mais je suis encore en train "deviceready a pas viré au bout de 5 secondes."J'ai eu un problème similaire concernant la mise à niveau vers Cordova 2.7. Cependant, mon problème était de ma console.les journaux arrêté de tir lors de l'exécution de l'application. Je ne pouvais pas comprendre pourquoi pour la vie de moi ce qui se passait. Je pensais que c'était parce que j'ai mise à jour de jquery.mobile. Ce n'était pas elle. J'ai alors pensé que c'était une .htaccess problème, ce n'était pas non plus. Il s'avère, il a été Cordova 2.7 qui a été à l'origine de ce problème.
J'ai essayé d'ajouter le .fichier json sur mon serveur, qui n'a pas de résoudre le problème.
Le correctif dans le 2.7 source et commentant le code suivant:
Remplacer tout le bloc avec un appel à la fonction suivante:
Mes journaux sont maintenant à nouveau au travail. Seulement m'a pris 3 jours à me gratter la tête.
Espère que cela aide quelqu'un avec un problème similaire.
Si vous incorporez Cordova dans la page web externe, il n'y aura pas moyen d'ouvrir la InAppBrowser à partir de votre hybride application Cordova ne sera pas en mesure de charger. C'est parce que le InAppBrowser exige de Cordoue à être complètement chargé et initialisé avant de pouvoir être utilisé pour extraire une distance de page. Vous avez besoin d'utiliser votre page HTML que vous avez, avec la
<script type="text/javascript" src="http://mydomain.com/mobile/cordova-2.7.0.js"></script>
comme le principal point d'entrée de votre application. Ensuite, vous pouvez utiliser le InAppBrowser pour ouvrir votre télécommande page. (Vous pouvez probablement le faire dans le onDeviceReady(), vous ne savez pas si il serait "flash" à la page mais d'abord.) Je ne pense pas que la distance page devrait avoir tout Cordova code à tous. Je ne sais pas si il serait possible d'être à même d'interagir avec Cordova à partir de la télécommande page en raison de la Même Origine (probablement vous pouvez utiliser les fonctionnalités de la InAppBrowser à injecter de "pont" code de recevoir autour pour cela.)Comme Shazron mentionné le problème est le problème avec le fichier"cordova_plugins.json".
Pour résoudre le problème de ne pas changer le code, vous pouvez créer le "cordova_plugins.json" fichier dans le dossier racine et insérer un contenu entre guillemets à l'intérieur de ce fichier.
Le mien, par exemple, a le contenu suivant:
créer un fichier
cordova_plugins.json
qui contient{}
. ensuite, allez àcordova-2.7.0.js
et commenter cette lignerequire('cordova/channel').onNativeReady.fire();
puis une fois le développement terminé, ajouterComme moi, si vous utilisez Cordova 5.1.1 et souhaitez accéder à une fonctionnalité native après rediriger ensuite copier cordova.js, cordova_plugins.js et les plugins du dossier qui se trouve dans \plateformes\platform_name\assets\www\ et les mettre sur le serveur, enfin de référence cordova.js à l'intérieur de votre code html. Après chaque plugin ajouter assurez-vous de mettre à jour ces fichiers et de dossiers.