Phonegap: incluye automáticamente cordova correcta

Estoy desarrollando una aplicación de teléfono en iOS y Android y tengo mi versión de directory www controlada con git. Sé que mi file HTML debe include el file Cordova.js correcto (según la plataforma en la que esté desarrollando actualmente).

Es un poco molesto tirar de cambios en www en iOS cuando alguien estaba trabajando en Android. Me da la interminable alerta gap_poll.

La solución simple es recordar cambiar el src de Cordova.js para que apunte a la versión de iOS otra vez. El problema con eso es que los otros desarrolladores necesitarán seguir cambiando su src si el último compromiso se realizó en otra plataforma.

¿Hay alguna manera de detectar automáticamente qué versión de Cordova include? De esa forma funcionaría en cualquier plataforma y no tendríamos que hacer cambios tediosos.

Tengo la misma configuration con mi HTML / JS compartido como submodule de Git. Mi index.html se encuentra en la carpeta compartida e incluye los files JS específicos de la plataforma mediante una ruta relativa.

Hay 3 proyectos de Git: Android, iOS y Shanetworking. Compartido se agrega como un submodule en Android e iOS.

Estructura de la carpeta

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

Y en index.html

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

Utilizo la misma idea para include files JS para complementos que también dependen de la plataforma.

El siguiente código funciona bien para mí:

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

Puede verificar el código fuente completo aquí

Solo debe tener su WWW principal bajo control de fuente, que no debe contener ningún file cordova . Debes agregarlos por teléfono a la carpeta de tu plataforma cuando hagas una compilation de teléfono. Entonces su index.html común puede tener:

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

En tu Master WWW no tendrás un script cordova.js, pero lo harás en tu plataforma / carpeta android cuando hagas un:

 phonegap build android 

Si necesita ajustar de forma condicional el contenido en su plataforma / carpetas xyz, Grunt.JS es una excelente opción.

En mi caso, acabo de crear un file zip para la carpeta www sin cordova.js o cordova-1.7.0.js (u otra versión). Envié ese zip al process de compilation y genera el file cordova.js correcto para que funcione en iOs y Android.

Dime si funcionó.

La respuesta de @ dhaval no funcionó para mí en una aplicación de Cordova en iOS 7.1.1. Aunque la label del script se agregó al encabezado, los scripts no se cargarían realmente como lo verifiqué con el inspector remoto de Safari.

En cambio, agregué el siguiente script, que obtuve de otra respuesta de SA .

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

y entonces

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

La solución anterior no funcionó para mí. Así que agregué esta solución 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); } 

Lo mismo ocurre con otras plataforms Phonegap, para Windows Phone solo agregue / Windows Phone / etc.

Y si tiene complementos, que también pueden ser diferentes de plataforma a plataforma. Simplemente agregue la carpeta del complemento y cordova_plugin.js a la misma carpeta.