Почему эта библиотека 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 определяется временем завершения кода. Все, что он делает, - добавляет эти свойства к новому пустому переданному объекту, но это никак не повлияет на выполнение функции инициализации.

Другие вопросы по тегам