web-dev-qa-db-fra.com

Phonegap - incluant automatiquement le bon cordova

Je développe une application phonegap sur iOS et Android et je contrôle la version de mon répertoire www avec git. Je sais que mon fichier HTML doit inclure le fichier Cordova.js correct (en fonction de la plate-forme sur laquelle je suis en train de développer).

Il est un peu ennuyeux de tirer des changements vers www sur iOS quand quelqu'un travaillait sur Android. Cela me donne l'alerte interminable gap_poll.

La solution simple est de ne pas oublier de changer le code d’information Cordova.js afin qu’il pointe à nouveau vers la version iOS. Le problème, c’est que les autres développeurs devront continuer à changer de code source si la dernière validation a été effectuée sur une autre plate-forme.

Existe-t-il un moyen de détecter automatiquement la version de Cordova à inclure? De cette façon, cela fonctionnerait sur n'importe quelle plate-forme et nous n'aurions pas à faire de changements fastidieux.

20
Farzad A

J'ai la même configuration avec mon HTML/JS partagé en tant que sous-module Git. Mon index.html se trouve dans le dossier partagé et inclut les fichiers JS spécifiques à la plate-forme via un chemin relatif.

Il y a 3 projets Git - Android, iOS et Partagé. Partagé est ajouté en tant que sous-module dans Android et iOS.

Structure de dossier

www
|-platform
    |-js/libs/cordova.js
|-shared
    |-index.html

Et dans index.html

<script type="text/javascript" src="../platform/js/libs/cordova.js"></script>

J'utilise la même idée pour inclure des fichiers JS pour des plugins qui dépendent également de la plate-forme.

14
codemonkey

Le code suivant fonctionne bien pour moi:

    function init() {
        if(isAndroid()){
            $("script").attr("src", "lib/Android/cordova-1.7.0.js").appendTo("head");
        }else if(isiOS()){
            $("script").attr("src", "lib/ios/cordova-1.7.0.js").appendTo("head");
        }

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

    function isAndroid(){
        return navigator.userAgent.indexOf("Android") > 0;
    }

    function isiOS(){
        return ( navigator.userAgent.indexOf("iPhone") > 0 || navigator.userAgent.indexOf("iPad") > 0 || navigator.userAgent.indexOf("iPod") > 0); 
    }

    function onDeviceReady(){
        console.log("device is ready");
    }

Vous pouvez vérifier le code source complet ici

25
dhaval

Vous ne devriez avoir que votre maître WWW sous contrôle de source, qui ne devrait contenir aucun cordova des dossiers. Ceux-ci doivent être ajoutés par phonegap dans le dossier de votre plate-forme lors de la construction de phonegap. Donc, votre index.html commun peut avoir:

<script type="text/javascript" src="cordova.js"></script>

Dans votre WWW maître, vous n’avez pas de script cordova.js, mais vous le ferez dans le dossier de votre plate-forme/Android lorsque vous exécuterez un:

phonegap build Android

Si vous devez conditionnellement modifier le contenu de vos dossiers plate-forme/xyz, Grunt.JS est une excellente option.

6
drdan

Dans mon cas, je viens de créer un fichier Zip pour le dossier www sans le cordova.js ou cordova-1.7.0.js (ou une autre version) . J'ai soumis ce fichier Zip au processus de génération et celui-ci génère le fichier cordova.js correct, de sorte qu'il fonctionne sous iOs et Android.

Dis-moi si ça a marché.

1
Kiko Fernandez

La solution ci-dessus n'a pas fonctionné pour moi. J'ai donc ajouté cette solution JQuery:

    var isAndroid = /Android/i.test(navigator.userAgent.toLowerCase());

if (isAndroid)
{
var script = document.createElement('script');
script.src = 'cordova/Android/cordova.js';
 document.head.appendChild(script);
}
var IOS = /ipad|iphone|iPod/i.test(navigator.userAgent.toLowerCase());
if (IOS)
{
 var script = document.createElement('script');
 script.src = 'cordova/ios/cordova.js';
 document.head.appendChild(script);
}

Il en va de même pour les autres plates-formes Phonegap, pour Windows Phone, ajoutez simplement/Windows Phone/etc.

Et si vous avez des plugins, ils peuvent également être différents d’une plate-forme à une autre. Ajoutez simplement le dossier du plugin et cordova_plugin.js au même dossier.

1

La réponse de @ dhaval n'a pas fonctionné pour moi dans une application Cordova sur iOS 7.1.1. Bien que la balise de script ait été ajoutée à l'en-tête, les scripts ne se chargeraient pas comme j'ai vérifié avec l'inspecteur distant de Safari.

Au lieu de cela, j’ai ajouté le script suivant, que j’ai récupéré de un autre SA answer .

function getScript(src, func) {
    var script = document.createElement('script');
    script.async = "async";
    script.src = src;
    if (func) {
       script.onload = func;
    }
    document.getElementsByTagName("head")[0].appendChild( script );
}

et alors

if ( navigator.userAgent.indexOf("iPhone") > 0 || navigator.userAgent.indexOf("iPad") > 0 || navigator.userAgent.indexOf("iPod") > 0) {
  getScript("js/cordova_ios.js");
} else if (navigator.userAgent.indexOf("Android") > 0) {
  getScript("js/cordova_Android.js");
}

document.addEventListener("deviceready", onDeviceReady, false);
1
Ted Avery