与others一样,我试图说明在移动浏览器中运行的javascript代码与phonegap webuiview中的区别。标准解决方案是等待deviceready
事件触发,因为在它触发后,你知道你正处于电话空白状态。但是你等了多久?
我有代码我想尽早运行,因为我不希望我的用户坐在那里等待。但我不想在初始化phonegap之前运行它,如果它要初始化的话。我正在寻找的东西就像devicenotready
事件,当cordova.js
代码运行并且确定它没有任何附加内容时会触发。或者我可以调查一些变量,以告诉cordova仍在加载和cordova放弃尝试加载之间的区别。有区别吗?
我讨厌这个解决方案,但这是我提出的最好的解决方案。请告诉我有比这更好的东西:
function whenLoaded(callback,timeout) {
var when_loaded_needs_running = true;
document.addEventListener('deviceready', function() {
if( when_loaded_needs_running ) {
when_loaded_needs_running = false;
callback();
} else {
console.log("deviceready fired too late. whenLoaded already ran.");
}
});
window.setTimeout(function() {
if( when_loaded_needs_running ) {
when_loaded_needs_running = false;
console.log("deviceready didn't fire after "+timeout+"ms. running whenLoaded anyway.");
callback();
}
}, timeout);
}
答案 0 :(得分:2)
更简单的测试是查看cordova
JavaScript全局是否可用 - 没有等待事件,您可以立即执行(只要它在理论<script>
包括cordova之后执行。 JS)。根据您运行的PhoneGap版本,您可能需要测试几个全局变量之一。
应该如此简单:
if(cordova || Cordova || PhoneGap) {
alert('hey im in a phonegap webview!');
} else {
alert('regular old browser, aw shucks');
}