IOSとAndroidの両方でphonegapアプリを開発しており、wwwディレクトリのバージョンをgitで管理しています。HTMLファイルに正しいCordova.jsファイルを含める必要があることはわかっています(どちらに応じて)私が現在開発しているプラットフォーム)。
誰かがAndroidで作業していたときに、iOSでwwwに変更を加えるのは少し面倒です。それは私に無限のgap_pollアラートを与えます。
簡単な解決策は、Cordova.js srcを変更して、iOSバージョンを再度指すようにすることです。それに関する問題は、最新のコミットが別のプラットフォームで行われた場合、他の開発者がsrcを変更し続ける必要があることです。
どのバージョンのCordovaを含めるかを自動的に検出する方法はありますか?そうすれば、どのプラットフォームでも機能し、面倒な変更を加える必要がなくなります。
共有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ファイルを含めます。
次のコードは私にとってはうまく機能します:
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");
}
あなたは完全なソースコードをチェックすることができます ここ
マスターWWWのみをソース管理下に置く必要があります。 コルドバ ファイル。これらは、phonegapビルドを実行するときに、phonegapによってプラットフォームフォルダーに追加する必要があります。したがって、一般的なindex.htmlには次のものがあります。
<script type="text/javascript" src="cordova.js"></script>
マスターWWWには、cordova.jsスクリプトはありませんが、次の操作を行うと、プラットフォーム/ Androidフォルダーで実行されます。
phonegap build Android
プラットフォーム/ xyzフォルダーのコンテンツを条件付きで微調整する必要がある場合は、Grunt.JSが最適なオプションです。
私の場合、wwwフォルダーのZipファイルを作成しました。cordova.jsまたはcordova-1.7.0.js(または他のバージョン)。そのZipをビルドプロセスに送信すると、iOとAndroidで動作するように、適切なcordova.jsファイルが生成されます。
それがうまくいったかどうか教えてください。
上記の解決策は私にはうまくいきませんでした。だから私はこの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);