2011-08-30 129 views
2

兩個問題:在<script>內容被加載後,jQuery.load()會加載嗎?

  1. 是否的<script>內容後jQuery.load()運行完全下載?

  2. 如果在情況下,是將動態地注入另一<script>文檔中的<script>load()運行後不後的第2個腳本的內容被下載,否則將運行後,原來的非動態內容加載?

由於


的例子爲2)的問題是這樣的:

<html> 
<head> 
<script src="myscrip1.js"></script> 
<script> 
$(document).load(myscript2.functionA); 
</script> 
</head> 
</html> 

凡myscript.js將注入myscript2.js到DOM。 其中myscript2.js包含函數myscript2.functionA

很明顯,我想在myscript2.js完全加載後運行myscript2.functionA。

:)

+0

請提供一個示例來幫助解釋您在說什麼。 – FishBasketGordo

+0

你怎樣調用.load()?根據我的經驗,它會按照它的名稱運行。因此,如果在加載動態腳本之前調用.load(),它將在動態腳本之前運行,但是,如果在加載動態腳本後調​​用它,它應該在其後運行。 – kushaldsouza

回答

1

如果你把load事件處理程序的標準document ready事件處理程序的包裝內,這將確保外部腳本首先被加載。你應該考慮這個標準做法。解決方法很簡單:當所有的初始HTML所引用的資源已經被下載(或萬一超時有錯誤)

<script src="myscrip1.js"></script> 
<script> 
$(document).ready(function() { 
    $(document).load(myscript2.functionA); 
}); 
</script> 
+0

不起作用。因爲myscript2.js會在$(document).ready ... $ documetn(load)...之後運行。因此,myscript2.functionA將是未定義的。 原因是$ document.ready將在myscript1準備好並加載後執行,這是原始HTML文檔中的代碼。動態腳本代碼不會成爲準備好並加載的HTML文檔的一部分。 – murvinlai

3

文檔準備好事件。如果您動態地將引用注入另一個腳本(如Facebook api,Google Analytics分析等),則其就緒程度與文檔就緒事件的關係未定義。

如果你想檢查你的外部腳本是否準備好,你可以檢查它創建的對象是否有been loaded

<script type="text/javascript"> 
    var startAfterJqueryLoaded = function(){ 
    if(typeof jQuery === "undefined") { 
     setTimeout(startAfterJqueryLoaded, 100); 
     return; 
    } 

    // jQuery is ready, do something 
    } 

    startAfterJqueryLoaded(); 

</script> 

或者,如果你有動態注射可以建立一個全球性的功能時,它已經準備好,它會調用腳本的控制。

<script type="text/javascript"> 
    window.dynamicScriptIsReady = function(){ 
    // do something 
    } 
</script> 


// Dynamic.js 
// ...Setup whatever 

window.dynamicScriptIsReady();