当jQuery没有准备好时执行Javascript

时间:2011-01-22 08:21:29

标签: javascript jquery

以下情况是我遇到的问题。我得出结论,当Javascript通过观察这种情况执行时,jQuery不能准备就绪。

情境:

我有一个Java应用程序,它将Javascript脚本标记注入当前加载的DOM页面。以下Java代码运行内联Javascript,其中插入 jquery.js myCode.js myCode.js 保存我的Javascript代码。

 browser.executeJavaScript("var head= document.getElementsByTagName('head')[0];" +
                                "var script= document.createElement('script');script.type= 'text/javascript';script.src= 'jquery.js';head.appendChild(script);" +
                                "var script4= document.createElement('script');script4.type= 'text/javascript';script4.src= 'http://myCode.js';head.appendChild(script4);");

在这个Java应用程序中,我还有一个 buttonListener ,用于在 ActionPerformed()中的myCode.js中触发一个函数;

executedJS = browser.executeJavaScript("replaceAllLinks()");

单击按钮时遇到的问题是上面一行的nullPointerException。容纳null case导致无限循环而没有任何变化。

while(executedJS == null) browser.executeJavaScript("replaceAllLinks()");

问题的原因被明确指出当jQuery函数时,方法存在于 replaceAllLinks(); javascript函数中。当jQuery,方法不存在时,没有任何问题可以观察到。没有提出 nullPointerException 的一个实例。

唯一可能的潜在问题是,当 replaceAllLinks(); 正在执行时,某些jQuery库未完全加载。如果没有使用jQuery方法和函数,那就无所谓了,一切运行正常。

我的问题是,如何确保jQuery完全加载并可供使用?

2 个答案:

答案 0 :(得分:1)

依赖于jQuery的每个脚本都应包含在DOM ready函数中。这样的功能通常采用以下形式:

$(document).ready(function() {
    /* code here */
});

和实现相同目标的捷径是:

$(function() {
    /* code here */
});

以下是有关ready方法的更多信息的文档: http://api.jquery.com/ready/

答案 1 :(得分:0)

声明一些全局变量at the end jquery.js,例如

window.jQueryIsLoaded=true;

并在使用jQuery之前检查此变量。

<edit> 忘记这一点,请参阅下面的Salman A评论,应该是正确答案。 </edit>