电话间隙设备未就绪事件

Phonegap deviceNotReady event?

本文关键字:就绪 事件 电话间 间隙 电话      更新时间:2023-09-26

像其他人一样,我试图区分在移动浏览器中运行的javascript代码和在phonegap webuiview中运行的javascript代码。 标准解决方案是等待 deviceready 事件触发,因为在它触发后,您知道自己处于 phonegap 中。 但是你要等多久?

我有代码想要尽早运行,因为我不希望我的用户坐在那里等待。 但是我不想在初始化 phonegap 之前运行它,如果它要初始化的话。 我正在寻找的是一个类似于devicenotready事件的东西,当 cordova.js 代码运行并确定它没有要附加到的内容时,它会触发。 或者我可以轮询一些变量来区分科尔多瓦仍在加载和科尔多瓦放弃尝试加载之间的区别。 有区别吗?

我讨厌这个解决方案,但它是我想出的最好的解决方案。 请告诉我还有比这更好的东西:

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

一个更简单的测试是查看 JavaScript 全局cordova是否可用 - 无需等待事件,您可以立即执行(只要它在包含 cordova.js 的理论<script>之后执行)。根据您运行的 PhoneGap 版本,您可能需要测试几个全局变量之一。

应该像这样简单:

if(cordova || Cordova || PhoneGap) {
  alert('hey im in a phonegap webview!');
} else {
  alert('regular old browser, aw shucks');
}