web-dev-qa-db-ja.com

Phonegap-正しいコルドバを自動的に含める

IOSとAndroidの両方でphonegapアプリを開発しており、wwwディレクトリのバージョンをgitで管理しています。HTMLファイルに正しいCordova.jsファイルを含める必要があることはわかっています(どちらに応じて)私が現在開発しているプラ​​ットフォーム)。

誰かがAndroidで作業していたときに、iOSでwwwに変更を加えるのは少し面倒です。それは私に無限のgap_pollアラートを与えます。

簡単な解決策は、Cordova.js srcを変更して、iOSバージョンを再度指すようにすることです。それに関する問題は、最新のコミットが別のプラットフォームで行われた場合、他の開発者がsrcを変更し続ける必要があることです。

どのバージョンのCordovaを含めるかを自動的に検出する方法はありますか?そうすれば、どのプラットフォームでも機能し、面倒な変更を加える必要がなくなります。

20
Farzad A

共有HTML/JSでGitサブモジュールと同じ設定をしています。私のindex.htmlは共有フォルダーにあり、相対パスを使用してプラットフォーム固有のJSファイルが含まれています。

Android、iOS、共有の3つのGitプロジェクトがあります。 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ファイルを含めます。

14
codemonkey

次のコードは私にとってはうまく機能します:

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

あなたは完全なソースコードをチェックすることができます ここ

25
dhaval

マスターWWWのみをソース管理下に置く必要があります。 コルドバ ファイル。これらは、phonegapビルドを実行するときに、phonegapによってプラットフォームフォルダーに追加する必要があります。したがって、一般的なindex.htmlには次のものがあります。

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

マスターWWWには、cordova.jsスクリプトはありませんが、次の操作を行うと、プラットフォーム/ Androidフォルダーで実行されます。

phonegap build Android

プラットフォーム/ xyzフォルダーのコンテンツを条件付きで微調整する必要がある場合は、Grunt.JSが最適なオプションです。

6
drdan

私の場合、wwwフォルダーのZipファイルを作成しました。cordova.jsまたはcordova-1.7.0.js(または他のバージョン)。そのZipをビルドプロセスに送信すると、iOとAndroidで動作するように、適切なcordova.jsファイルが生成されます。

それがうまくいったかどうか教えてください。

1
Kiko Fernandez

上記の解決策は私にはうまくいきませんでした。だから私はこの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プラットフォームにも当てはまります。WindowsPhoneの場合は、/ windows phone /などを追加するだけです。

また、プラグインがある場合は、プラットフォームごとに異なる可能性があります。プラグインフォルダーとcordova_plugin.jsを同じフォルダーに追加するだけです。

@dhavalの回答は、iOS7.1.1のCordovaアプリケーションでは機能しませんでした。スクリプトタグがヘッダーに追加されましたが、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);
1
Ted Avery