Почему эта библиотека Javascript доступна в браузере, а не в PhoneGap?
Я определил библиотеку в 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();
}
Что происходит, так это то, что обычный веб-браузер прекрасно справляется с этим. Однако, когда я загружаю на свой iPhone с помощью приложения PhoneGap Build, он попадает в "bsdi.SomeName" и вылетает, потому что bsdi не определен. Я думал, что мой метод определения библиотеки bsdi был правильным, но, очевидно, в PhoneGap есть что-то, что не нравится этому. Обратите внимание, что "isPhoneGap" имеет значение true, и мы используем addEventListener на устройстве.
Любые идеи с благодарностью!
ОБНОВЛЕНИЕ: Я догадывался, что я попытался переместить объект bsdi в тот же файл.js, что и код, который его использует. В этом случае он находит объект и правильно его использует. Однако, когда это внешний файл, он терпит неудачу. И да, я трижды проверил, что файл существует и находится в правильном месте. Опять же, он отлично работает в браузере!
1 ответ
Если window.bsdi
не определено, то (как указано в вашем вопросе) ваш код инициализации никогда не гарантирует, что window.bsdi
определяется временем завершения кода. Все, что он делает, - добавляет эти свойства к новому пустому переданному объекту, но это никак не повлияет на выполнение функции инициализации.