2012-07-16 58 views
0

我有下面的代碼佈局的Javascript SRC加載順序

<script src="http://some.javascript/file.js"></script> // This should load first 
<script language="JavaScript"> 
    document.write('<SCR'+'IPT language="JavaScript1.1" SRC="http://a.link.to.an.external.url/that/returns/a/full/html/page/including/some/javascript">'); // This should load second 
    document.write('</SCR'+'IPT>'); 
</script> 

MyJavascriptFunctionThatDependsOnStuffLoadedFromThe.documentWritePage(); <!-- Those files above should have loaded before this call --> 

我知道這看起來奇怪。讓我們假設它HAS看起來像這樣的原因,不會影響如何JS加載。這不需要跨瀏覽器工作 - 只需WebKit瀏覽器。

如何確保每個文檔在下一個文檔之前完全加載?也就是說,我如何確保這些文檔同步加載,以便最終的函數調用可以採取適當的狀態?

+0

你爲什麼使用'document.write()'? – Brad 2012-07-16 17:47:50

+0

這是什麼? 'document.write(''); ' – coolguy 2012-07-16 17:48:13

+0

*嘆*讓我們假設代碼需要看起來像這樣。我真的不想進入它。 – user5243421 2012-07-16 17:50:34

回答

1

JavaScript文件應按順序加載並阻止,除非您所依賴的腳本執行的是異常操作,您應該只需在其他文件之後加載application.js。

跨域腳本在站點本身的腳本之後加載,這就是爲什麼你會收到錯誤。

你可以在這個事件中添加事件偵聽器並加載JS文件,像這樣:

function addJavaScript(js, onload) { 
    var head, ref; 
    head = document.getElementsByTagName('head')[0]; 
    if (!head) { return; } 
    script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = js; 
    script.addEventListener("load", onload, false); 
    head.appendChild(script); 
} 
+0

這是如何解決達倫尋求解決同步問題的?這顯然比'document.write'版本更好,但我不明白它是如何解決基本問題的。 – 2012-07-16 19:25:25

0

我不認爲你可以這樣做一貫的跨瀏覽器。

IE(至少很多舊版本)將按照服務器返回的返回的順序處理腳本標記。許多其他瀏覽器按照定義的順序處理它們。像這樣動態添加到DOM的人,誰知道?我當然不會指望能夠控制它們的執行順序,除非在添加下一個之前添加某種包裝來測試這個包裝。

如果它只是這樣,我真的不知道該怎麼建議。但是,如果您可以切換使用它們,則有許多模塊加載器。你可能看起來尤其如此AMD