我正在iOS和Android上开发一个phonegap应用程序,并使用git控制我的www目录版本。我知道我的HTML文件需要包含正确的Cordova.js文件(取决于我目前正在开发的平台)。
当有人在开发Android时,对iOS上的www进行更改有点烦人。它给了我无尽的gap_poll警报。
简单的解决方案是记住更改Cordova.js src,使其再次指向iOS版本。问题在于,如果最新提交是在另一个平台上完成的,其他开发人员将需要不断更改其src。
有没有办法自动检测要包含哪个版本的Cordova?这样它可以在任何平台上运行,我们不必进行繁琐的更改。
答案 0 :(得分:25)
以下代码适用于我:
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");
}
您可以查看完整的源代码here
答案 1 :(得分:14)
我和我的共享HTML / JS作为Git子模块具有相同的设置。我的index.html位于共享文件夹中,并使用相对路径包含特定于平台的JS文件。
有3个Git项目 - Android,iOS和Shared。 Shared被添加为Android和iOS中的子模块。
文件夹结构
www
|-platform
|-js/libs/cordova.js
|-shared
|-index.html
在index.html中
<script type="text/javascript" src="../platform/js/libs/cordova.js"></script>
我使用相同的想法来包含与平台相关的插件的JS文件。
答案 2 :(得分:6)
您应该只拥有源控制下的主WWW,它不应包含任何 cordova 文件。当您进行phonegap构建时,应通过phonegap将这些添加到您的平台文件夹中。所以你的常见index.html可以有:
<script type="text/javascript" src="cordova.js"></script>
在您的主WWW中,您将没有cordova.js脚本,但是当您执行以下操作时,您将在您的platform / android文件夹中执行:
phonegap build android
如果您确实需要有条件地调整平台/ xyz文件夹中的内容,Grunt.JS是一个不错的选择。
答案 3 :(得分:1)
在我的情况下,我刚为 www 文件夹创建了一个zip文件,没有 cordova.js 或 cordova-1.7.0.js (或其他版本)。我将该zip提交给构建过程并生成了正确的 cordova.js 文件,以便它适用于iOs和Android。
告诉我它是否有效。
答案 4 :(得分:1)
相反,我添加了以下脚本,我从another 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 );
}
然后
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);
答案 5 :(得分:1)
上述解决方案对我没有用。所以我添加了这个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);
}
其他Phonegap平台也是如此,对于Windows手机只需添加/ windows phone /等。
如果你有插件,也可以从平台到平台不同。只需将插件文件夹和cordova_plugin.js添加到同一文件夹即可。