我看到PhoneGap的一些奇怪行为。 OnDeviceReady会触发,但是当我使用“device”变量时,它仍然是未定义的。我找到了一些与此对话的代码,并说使用setTimeout等待一秒钟(再次,在它说好之后)实际使用变量(下面):
setTimeout(function () {
MobileDevice = new MobiDevice(device);
}, 1000);
这似乎最初起作用,但现在看来时间是不确定的。我最近不得不将超时时间提高到5000.这是我们当前的代码:
setTimeout(function () {
console.log("starting setup");
try {
MobileDevice = new MobiDevice(device);
console.log("created MobiDevice from a real device");
}
catch (error) {
console.log("no device reference - mocking device");
var d = {
platform: "Android",
version: 5
};
MobileDevice = new MobiDevice(d);
}
console.log("device setup complete");
}, 5000);
如果确实是时间不确定的情况,那么其他人用来解决这个问题的策略是什么。如果它不应该是不确定的,我可以在哪些区域寻找修复。
提前致谢
答案 0 :(得分:1)
我建议你使用民意调查。
setTimeout(function () {
if(device !== undefined)
MobileDevice = new MobiDevice(device);
else
setTimeout( arguments.callee, 1000 );
}, 1000);
如果您愿意,您可以使用超时限制(此处为1000毫秒)进行调整,使其在每次通话后减少......您明白了。
答案 1 :(得分:0)
所以,这里的答案是双重的。一,PhoneGap就是这样,即使在PhoneGap认为设备准备好之后,你也必须等待设备变量初始化。我使用了setInterval并等到我可以使用'device'然后将它传递给我的包装器。
另一部分是网络。在测试期间,我们希望能够模拟设备并放弃设备初始化,因为它不会发生。
if (navigator.platform.match(/(mac|win)/i)) {
console.log("on a browser, mocking the device");
// we are on the browser
// you can manually set properties here to test for different devices
var d = {
platform: "Android",
version: 5
};
MobileDevice = new MobiDevice(d);
}
else {
目前,我们只关心iPhone和Android,因此如果只是navigator.platform,我们可以获得运行浏览器的平台。这在Windows,iPhone,Android和Mac之间会有所不同。不同,我们可以区分。如果我们决定支持WP,那么很有必要改变这一点,很可能是