【问题标题】:How to prevent PhoneGap device ready function to be executed twice如何防止PhoneGap设备就绪功能被执行两次
【发布时间】:2013-06-29 05:03:41
【问题描述】:

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

我改编了 Jamie Munro 的“PhoneGap 编程的 20 个秘诀”中的代码,但它不能正常工作(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');
    }

}

【问题讨论】:

  • 设备是否准备好在设备上被多次调用? Ripple 行为不端很多次,大多数事件会触发两次。
  • 它实际上在黑莓上表现良好,所以我想这只是 chrome 中的一点点涟漪......
  • 是的...总是在设备模拟器或实际设备上测试

标签: javascript cordova ripple


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多