2011-01-22 54 views
1

以下情况是我遇到的问题。我得出了这样的结论,即在执行Javascript时,通过观察这种情况,jQuery一定不能做好准备。当jQuery没有准备好时执行Javascript

场景:

我有注入的Javascript脚本标记到当前加载DOM页的Java应用程序。以下Java代码运行内嵌Javascript,其中插入jquery.jsmyCode.jsmyCode.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是火灾myCode.js的函数的actionPerformed();

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

遇到的问题是单击按钮时在上面一行出现nullPointerException异常。适应空情况导致无限循环而没有任何改变。

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

该问题的原因被精确定位至当jQuery的功能,方法是本内replaceAllLinks(); javascript函数。当jQuery,方法不存在,没有问题可以观察到。没有一个nullPointerException引发的实例。

唯一可能的潜在问题是,jQuery库不能完全加载,而replaceAllLinks();正在执行。如果jQuery方法和函数没有被使用,那没关系,一切都可以运行。

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

+0

您的$(document).ready在哪里? – jmort253 2011-01-22 08:56:18

回答

1

每个依赖于jQuery的脚本都应该包含在DOM就绪函数中。这种功能一般需要这种形式:

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

和快捷方式来达到同样的事情将是:

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

这里有现成的方法以获得更多信息的文档: http://api.jquery.com/ready/

+0

+1,这是确定jQuery的方式。 – Exelian 2011-01-22 12:29:47

0

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

window.jQueryIsLoaded=true; 

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

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

+0

Infact,你可以检查'typeof jQuery!=='undefined'。 – 2011-01-22 10:37:32

相关问题