2010-12-11 81 views
0

我正在構建一個自動組合並縮小網站JavaScript的web服務。網站所有者只需將以下js片段包含在網站頭部中,並創建縮小文件並將其附加到head元素。動態插入腳本並立即執行

我看到的問題是,當一個腳本動態追加時,它不一定在身體的其他部分之前執行。由於許多網站可能希望在生成正文之前執行頭文件,這是一個問題。

有沒有什麼辦法可以強制動態追加腳本在其他任何事情之前執行?也許有一種解決方法,比如刪除整個主體並在追加腳本加載後重新插入它。雖然這看起來很詭異。

<script type="text/javascript"> 
    var minify_files = new Array(
     'domain.com/js/one.js', 
     'domain.com/js/two.js', 
     'domain.com/js/three.js' 
    ); 
</script> 
<script type="text/javascript" src="minifyservice.com/minify.js"></script> 
+0

編寫您計劃執行的功能並從內部調用它,一旦插入腳本,您的功能將執行。 – Babiker 2010-12-11 00:42:16

+0

無法執行此操作,因爲執行的操作是「minify_files」數組中所有文件的縮小和組合版本。這項服務的重點是網站所有者只是嵌入上面的代碼,它只是工作。 – makeee 2010-12-11 00:47:19

+0

所以你需要你提供的腳本來執行FIRST?是否有理由期望您的用戶將腳本放在頁面頂部的頂部 – user406905 2010-12-11 03:29:59

回答

0
<script type="text/javascript" src="minifyservice.com/minify.js"></script> 

的用戶代碼

<script type="text/javascript"> 
    minify_files([ 
     'domain.com/js/one.js', 
     'domain.com/js/two.js', 
     'domain.com/js/three.js' 
    ]); 
</script> 

或類似的可能會更好的東西之前會去。 minify.js將定義函數minify_files,它會是這樣的:

function minify_files(paths) { 
    var query=""; 
    for (var i = 0; i < paths.length; i++) { 
     query += encodeURIComponent(paths[i]); 
     query += i < paths.length - 1 ? "&" : ""; 
    } 
    document.write(
     "<scri" + "pt src=\"minifyservice?" + 
     query + "\"><scri" + "pt>" 
    ); 
} 

未經測試。但應該是一個很好的起點。由於document.write,它會阻止並確保腳本在加載頁面之前加載,但只會在頁面完成呈現之前運行。 (保持頭部或至少在關閉身體標記之前)。

0
  • 我認爲你需要詢問/要求 用戶把腳本標籤 之前的任何其他資產。
  • 將您的腳本數組放入 查詢字符串中。
  • 後端服務結合,並返回腳本

<script type="text/javascript" src="site.com/mini.js?script1&script2"></script>