2011-12-15 24 views
0

我有以下代码从某个网站加载通过JavaScript一个JavaScript基准,并从控制台立即调用它

j=document.createElement("SCRIPT"); 
j.src="http://code.jquery.com/jquery-latest.pack.js"; 
document.getElementsByTagName("HEAD")[0].appendChild(j); 
var J = jQuery.noConflict(); 

文档中加载的jQuery如果我跑这从控制台块,我得到

ReferenceError: jQuery is not defined

但是,如果我手动输入每一行,最后一行运行良好,我没有得到异常。

有我丢失的东西 - 也许是DOM需要几毫秒完成处理先前的命令?

不管问题是什么,没有任何一个知道如何解决这个问题?

这发生在Chrome和Firefox分别开发工具和萤火虫。

+0

这不是这么多的DOM需要时间来处理的命令。您只需在DOM上推送一个脚本标记,但由于它是外部参考,它将被下载并异步运行。通过运行下一个命令,您可以假设下载和脚本解释已完成。这可能不是,因此未定义的错误。既然你已经标记这与“谷歌铬”,我会说,在onload功能将工作,但这并不在每个浏览器工作,所以要知道你的里程可能会有所不同。 – 2011-12-15 04:08:01

回答

4
j=document.createElement("SCRIPT"); 

j.onload = function(){ 
    window.J = jQuery.noConflict(); 
}; 

j.src="http://code.jquery.com/jquery-latest.pack.js"; 
document.body.appendChild(j); 
+0

如果你不想让jQuery作为`jQuery`变量来访问,你想改为`J = jQuery.noConflict(true);`。 – 2011-12-15 02:25:38

+0

直到Esalija接受的变化,也成为一个好人和脚本追加到document.head,不document.body的! – 2011-12-15 04:11:35

0

尝试用这种替代的最后一行:

function checkJQuery() { 
    if (typeof(jQuery) == 'undefined') { 
     setTimeout('checkJQuery', 50); 
    } 
    else { 
     J = jQuery.noConflict(); 
     J(function() { 
      // Document ready stuff here 
     }); 
    } 
} 

checkJQuery(); 
相关问题