2010-05-11 84 views
4

我下载的JQuery异步:如何在JQuery加载后执行回调?

function addScript(url) { 
    var script = document.createElement('script'); 
    script.src = url; 
    document.getElementsByTagName('head')[0].appendChild(script); 
} 
addScript('jquery.js'); 

// non-jquery code ... 

// jquery specific code like: $()... 

这样 - 我怎么叫一次我的JQuery JQuery的特定代码加载(因为自从我下载我的JavaScript非同步 - 这不是堵,这是很好的,但正试图在JQuery加载之前执行我的特定于JQuery的代码)。

+1

出于好奇,为什么你要异步加载脚本? – dclowd9901 2010-05-11 19:07:45

+0

因为我不希望他们在下载时阻止并且响应性非常重要。 – Teddyk 2010-05-11 19:08:47

+0

阻止什么,到底?页面加载?如果这是您的担忧,只需将代码实例化放在页面底部,就在''标签之前...... – dclowd9901 2010-05-11 19:15:11

回答

-1

我没有太多的标准JavaScript,但你可以尝试做这样的事情:

var script_object = new addScript('jquery.js'); 

script_object.onLoad('addScript("my_jquery_related.js")'); 

诚然,这是一个在黑暗中拍摄巨型。

如果还是不行,也许通过你的函数传入一个回调变量在JS装载机:

addScript(url, function(){ function_to_call();}) 

function addScript(url, call_back_function) { 
    var script = document.createElement('script'); 
    script.src = url; 
    document.getElementsByTagName('head')[0].appendChild(script); 

    call_back_function.call; 
} 
addScript('jquery.js'); 

这就是我的一切:\

+0

我真的想调用一个已经存在内联HTML页面的jquery函数。所以它会更像* script_object.onLoad(my_jquery_related_code())'); * – Teddyk 2010-05-11 19:22:46

+0

@ dclowd9901,我得到一个错误,“script_object.onLoad不是函数” – Teddyk 2010-05-11 19:24:06

+0

是的,我很害怕会发生。我认为onLoad只保留给'window'或'document'。用antoher选项更新答案... – dclowd9901 2010-05-11 19:28:35

3

您可以承载的副本jquery文件自己。然后你就可以在jquery.js和底部添加回调函数的调用:

/* jquery code goes here ... */ 

my_onload_callback(); 
1

可以内嵌LabJs到您的网页(潜在的,每一页)。缺点是,你一遍又一遍地重写脚本。从正面看,LabJs是非常小 - 4K精缩 - 它可以让你处理复杂的异步加载模式非常简单的代码像跨浏览器:

<script> 
// Minified LabJs goes here 
</script> 
<script> 
function init() { 
    // Your code after jquery loads goes here 
} 

$LAB 
.script('//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js') 
.wait(init); 
</script> 
</body> 
2

对于我这个工作(在Firefox 33.0.3测试):

if(typeof(jQuery) == "undefined"){ 

     //create onload-callback function 
     window["__9384nalksdfalkj04320"] = function(){ 
      console.log("jQuery=" + jQuery); 
     }; 

     //load jQuery asynchronously 
     var script = document.createElement("script"); 
     script.setAttribute("type", "text/javascript"); 
     script.setAttribute("onload", "__9384nalksdfalkj04320();"); //register onload-callback listener function 
     script.setAttribute("src", "http://code.jquery.com/jquery-latest.min.js"); 
     document.head.appendChild(script); 
    } 
相关问题