Phonegap - 自动包括正确的cordova

时间:2012-06-06 22:38:11

标签: javascript android ios git cordova

我正在iOS和Android上开发一个phonegap应用程序,并使用git控制我的www目录版本。我知道我的HTML文件需要包含正确的Cordova.js文件(取决于我目前正在开发的平台)。

当有人在开发Android时,对iOS上的www进行更改有点烦人。它给了我无尽的gap_poll警报。

简单的解决方案是记住更改Cordova.js src,使其再次指向iOS版本。问题在于,如果最新提交是在另一个平台上完成的,其他开发人员将需要不断更改其src。

有没有办法自动检测要包含哪个版本的Cordova?这样它可以在任何平台上运行,我们不必进行繁琐的更改。

6 个答案:

答案 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)

在iOS 7.1.1的Cordova应用程序中,@ dhaval的答案对我不起作用。尽管脚本标记已添加到标题中,但我实际上并未加载脚本,因为我使用Safari的远程检查程序进行了验证。

相反,我添加了以下脚本,我从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添加到同一文件夹即可。