Javascript でライブラリを定義しました。これは、ブラウザを使用しているときにはうまく機能しますが、デバイスの PhoneGap で実行すると名前が見つかりません。
ライブラリは次のように定義されています。
(function(bsdi, $) {
bsdi.SomeName = "XYZ";
bsdi.addDays = function (date, days) { ...stuff here...}
....
}(bsdi = window.bsdi || {}, jQuery));
後で、最後にロードされた .js ファイルには、次のものがあります。
function knockoutFn() {
var self = this;
if (bsdi.SomeName == "XYZ") { <<--- CRASHES HERE, "bsdi not defined" but only on Device
...stuff here...
}
}
// Happens to use Knockout...
var koFn = new knockoutFn();
ko.applyBindings(koFn);
function init() {
if (isPhoneGap) {
document.addEventListener("deviceready", onDeviceReady, false);
}
else {
koFn.InitPage();
}
}
function onDeviceReady() {
// Now safe to use the Cordova API
koFn.InitPage();
}
何が起こるかというと、通常の Web ブラウザーはこれを問題なく処理します。しかし、PhoneGap Build アプリを使用して iPhone にダウンロードすると、「bsdi.SomeName」になり、bsdi が定義されていないためにクラッシュします。bsdi ライブラリを定義する私の方法は正しいと思いましたが、明らかに、PhoneGap にはこれが気に入らないものがあります。「isPhoneGap」が true であり、デバイスで addEventListener を使用していることに注意してください。
どんなアイデアでも大歓迎です!
更新: 直感で、bsdi オブジェクトを、それを使用するコードと同じ .js ファイルに移動しようとしました。この場合、オブジェクトを見つけて正しく使用します。ただし、外部ファイルの場合は失敗します。はい、ファイルが存在し、正しい場所にあることをトリプルチェックしました。繰り返しますが、ブラウザでは問題なく動作します。