我在 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();
}
发生的事情是普通的网络浏览器可以很好地处理这个问题。但是,当我使用 PhoneGap Build 应用程序下载到我的 iPhone 时,它会进入“bsdi.SomeName”并崩溃,因为未定义 bsdi。我认为我定义 bsdi 库的方法是正确的,但很明显,PhoneGap 中有些东西不喜欢这样。请注意,“isPhoneGap”为真,我们确实在设备上使用了 addEventListener。
任何想法都非常感谢!
更新:凭直觉,我尝试将 bsdi 对象移动到与使用它的代码相同的 .js 文件中。在这种情况下,它会找到对象并正确使用它。但是,当它是外部文件时,它会失败。是的,我已经三次检查该文件是否存在并且位于正确的位置。同样,它在浏览器中运行良好!