Phonegap deviceNotReady事件?

时间:2012-06-04 17:56:53

标签: javascript ios cordova

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);
}

1 个答案:

答案 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');
}