2

在我的应用程序中,我在加载 index.html 中的脚本文件时调用函数 init()。以下代码应验证 cordova 是否已成功加载(适用于现代手机,但也适用于较旧的 BlackBerries)并随后调用 onDeviceReady 函数。

我改编了 Jamie Munro 的“20 个 PhoneGap 编程食谱”中的代码,但它不能正常工作(intervalID 仅在本地可用)。后来发现 onDeviceReady 函数被多次调用......我尝试了几种方法来防止它,但即使是下面的示例在涟漪模拟器中运行时也不能解决问题。

我错过了什么?

var count = 0

function init() {

    // Add an event listener for deviceready
    document.addEventListener("deviceready", onDeviceReady, false);

    // Older versions of Blackberry < 5.0 don't support
    // PhoneGap's custom events, so instead we need to perform
    // an interval check every 500 milliseconds to see whether
    // PhoneGap is ready.  Once done, the interval will be
    // cleared and normal processing can begin.
    intervalID = window.setInterval(function() {
        if (window.cordova) {
            window.clearInterval(intervalID);
            onDeviceReady();
        }
    }, 1000);
}

function onDeviceReady() {

    if(count == 0) {
        count += 1;
        alert('The device is now ready');
    }

}
4

1 回答 1

1

Ripple 似乎加载页面一次以捕获 URL,然后在 iframe 中再次加载它以将其显示在模拟手机上。因此,所有内容的两个副本都会被加载,但会被加载到不同的文档中。由于我得到了包括按钮点击在内的所有事件的两个事件,所以我的代码的两个副本似乎都收到了相同的事件。或者,Ripple 可能会为另一个复制它。但是由于代码位于不同的文档和不同的范围内,它们似乎不会相互干扰(至少它们对我来说还没有)。也许其他人可以对我认为我检测到的内容给出更好、更有见地的解释。

于 2013-06-28T21:03:41.367 回答