20

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

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

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

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

4

6 回答 6

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

你可以在这里查看完整的源代码

于 2012-06-07T05:47:53.903 回答
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 文件。

于 2012-06-07T10:33:49.797 回答
6

您应该只将您的主 WWW 置于源代码控制之下,其中不应包含任何cordova文件。当您进行 phonegap 构建时,这些应该由 phonegap 添加到您的平台文件夹中。所以你常见的 index.html 可以有:

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

在您的主 WWW 中,您不会有一个 cordova.js 脚本,但是当您执行以下操作时,您将在您的平台/android 文件夹中执行:

phonegap build android

如果您确实需要有条件地调整您的平台/xyz 文件夹中的内容,Grunt.JS 是一个不错的选择。

于 2014-02-03T23:10:33.080 回答
1

就我而言,我只是为www文件夹创建了一个 zip 文件,没有cordova.jscordova-1.7.0.js(或其他版本)。我将该 zip 提交到构建过程,它会生成正确的cordova.js文件,以便它可以在 iO 和 Android 上运行。

告诉我它是否有效。

于 2012-07-23T13:34:15.220 回答
1

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

相反,我添加了以下脚本,该脚本是从另一个 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 );
}

进而

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);
于 2014-05-21T08:48:09.957 回答
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 phone 只需添加 /windows phone/ 等。

如果你有插件,它也可能因平台而异。只需将插件文件夹和 cordova_plugin.js 添加到同一文件夹即可。

于 2014-07-15T15:09:01.607 回答