2012-11-20 65 views
0

我有兩個不同的JavaScript。我只想在加載這兩個js文件或腳本之後才能啓動一個函數,因爲它們需要訪問彼此的函數和/或變量。如何加載兩個JavaScript文件?

我不知道哪一個會先載入。

這樣做的正確方法是什麼? (A)不同步加載數據,並且腳本(B)需要等到所有數據加載並啓動才能繼續執行(例如,youtube視頻從(A)加載並需要開始播放之前(B)可以執行)

回答

2

<script>一般同步加載。文檔的評估停止等待腳本加載並執行。它是這樣處理的,因爲腳本可能會通過使用諸如document.write()之類的東西來干擾文檔,所以解析器無法確定,文檔的其餘部分保持其當前顯示的方式。

因此,要在腳本加載完成後執行腳本,只需將第三個<script>標記放在啓動代碼的後面,即加載腳本。

<script src="scriptA.js"></script> 
<script src="scriptB.js"></script> 
<script> 
    // start something of scriptB 
    scriptB.start(); 
</script> 
+0

其中之一是一個腳本,從Youtube加載異步數據和更多腳本,所以我必須等到整個視頻加載啓動一個函數。 – mgPePe

+0

@mgPePe然後,你可能不得不使用'setInterval()'來添加一個函數來檢查結果是否已經存在,因爲即使腳本的onload事件也不會捕獲腳本的異步部分。 – Sirko

+0

所以如果我明白了,B會先走,設置變量'check = false',然後設置間隔,看看檢查是否仍然是假的。一個會加載和onload事件將有'check = true',這將觸發我需要的任何東西,是嗎? – mgPePe

0

隨着腳本同步加載,只需在這兩個文件後面加載執行其功能的腳本即可。 無論如何,如果你有腳本與依賴關係,我會鼓勵你使用模塊加載器,例如RequireJS。這樣,您可以定義在執行開始之前應該加載哪些模塊/文件。

+0

其中一個腳本雖然有異步加載 – mgPePe

+0

所以我一定會鼓勵你使用'RequireJS' – davids