以下情况是我遇到的问题。我得出结论,当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完全加载并可供使用?
答案 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>