2015-07-21 50 views
0

我需要以同步方式包含多個js文件,並且一旦它們成功包含,我將調用function main()這將創建該小部件。對於目前我已經建立了這樣的功能以同步方式使用javascript加載.js文件

var scriptArrayHC = [retrieveURL()+"/js/bootstrap.min.js", 
        "//platform.twitter.com/widgets.js", 
        retrieveURL()+"/js/html5shiv-2.js", 
        retrieveURL()+"/js/ie-emulation-modes-warning.js", 
        retrieveURL()+"/js/ie10-viewport-bug-workaround.js"]; 
function loadScript(scriptArray, func){ 
    var counter_script=0; 
    [].forEach.call(scriptArray, function(src){ 
     var script = document.createElement('script'); 
     script.onload = function() { 
      counter_script++; 
      //console.log("Script "+counter_script+" --- "+src); 
      if(counter_script==scriptArray.length) eval(func); 
     }; 
     script.src = src; 
     document.getElementsByTagName('head')[0].appendChild(script); 
    }); 
} 

loadScript(scriptArray, "main()"); 

它工作正常..但我認爲這不是最好的方法。有沒有人有更好的方法來做到這一點,或者有沒有任何圖書館?

+0

爲什麼不動異步加載(需要/ browserify /的WebPack/JSPM /諸如此類的東西)? – Amit

+0

通過[git]上的RequireJS挖掘(https://github.com/jrburke/requirejs)。當它加載js _async_時,它似乎將腳本附加到標題中,並且可能與您嘗試實現的內容距離不遠 - 查看代碼,我確信它們已經接近_best way_ 。 –

+0

動態異步加載是否會處理一個js文件對另一個文件的依賴性? – void

回答

0

使用RequireJS解決問題

+0

這樣處理CSS和JS嗎? – void

+0

是的,它處理CSS和JS,更多信息在這裏:http://requirejs.org/docs/faq-advanced.html – GibboK