2010-04-29 86 views
2

訪問變量:無法從動態加載的javascript

include = function (url) { 
    var e = document.createElement("script"); 
    e.src = url; 
    e.type="text/javascript"; 
    document.getElementsByTagName("head")[0].appendChild(e); 
}; 

比方說,我有一個具有以下內容的文件test.js:

var foo = 4; 

現在,在我原來的劇本,我想用

include(test.js); 
console.log(foo); 

不過,我得到一個「富尚未定義」埃羅在此。我猜測它與包含在<head>標記的最後一個孩子中的動態腳本有關。我怎樣才能使這個工作?

回答

3

這是一個問題,但瀏覽器下載並解析遠程JS文件也需要一些時間 - 在調用console.log之前,它尚未完成。

您需要延遲的東西,直到腳本加載。

這是最簡單的方法,通過讓圖書館完成繁重工作,jQuery有一個getScript方法,可讓您在腳本加載時傳遞迴調以運行。

5

這是因爲您必須等待腳本加載。它不像你想象的那樣是同步的。這可能適合你:

include = function (url, fn) { 
    var e = document.createElement("script"); 
    e.onload = fn; 
    e.src = url; 
    e.async=true; 
    document.getElementsByTagName("head")[0].appendChild(e); 
}; 

include("test.js",function(){ 
    console.log(foo); 
}); 
+0

好簡單的腳本。但是,我們如何將失敗事件(如未建立的連接,或404等)納入此.. – user1517108 2016-02-09 05:44:03