【问题标题】:Playbook WebWorks jQuery on ready being called twicePlaybook WebWorks jQuery 准备被调用两次
【发布时间】:2025-12-15 21:50:01
【问题描述】:

我正在尝试为 Blackberry Playbook 开发应用程序(是的,我知道,它已经死了……请耐心等待)。

我正在使用一个简单的 WebWorks 应用程序,当我加载页面时,我的 jQuery ready() 函数似乎被调用了两次。

<!doctype html>
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                    alert("ready");
            });
        </script>
    </head>
    <body>
        Hello World.
    </body>
</html>

知道为什么会发生这种情况吗?我正在 Playbook 的 Ripple 模拟器中进行测试。

【问题讨论】:

  • 所以当你重新加载页面时会触发两次警报?
  • 这种情况在使用简写语法时也会发生。在另一个地方,有人建议 setTimeout(startup, 3000) [其中 startup 是围绕正常准备调用的包装函数]。哪个确实有效,但这是一种糟糕的解决方法,必须将其删除以进行生产。 (没有发生此问题)我仍在寻找更好的解决方案...将在此处更新。

标签: jquery blackberry-simulator blackberry-playbook ripple


【解决方案1】:

我很确定当前版本的 Ripple 无论如何在 Windows 上都会加载页面两次。它与 jQuery(或我也在使用的 CoffeScript)无关。

即使我不喜欢它,我的解决方案也是:

// earlier
var runner = function() {
  alert('ready');
};

// later
$(function() {
  if(window.tinyHippos) {
    setTimeout(runner, 3000);
  } else {
    runner();
  }
});

相当老套,但它似乎工作。希望在 Ripple 的下一次迭代中,双重负载将消失。

【讨论】:

    【解决方案2】:

    在您的测试工作中,您是否尝试过替代使用 .ready() 的快捷方式来查看它们是否通过两个警报执行相同的结果?

    $(function() {
        alert('ready');
    });
    

    另外,也许尝试使用以前版本的 jQuery 只是为了验证它是否与最新版本的 jQuery 中的问题有关。

    所以,不妨试试 1.6.1 而不是 1.7.1。

    我希望我能提供更多帮助,但不幸的是,我个人并没有 Playbook。

    【讨论】: