2016-04-19 49 views
0

還有就是簡單的頁面:如何動態添加將被執行的腳本?

<html> 
    <head> 
    <script type="text/javascript" src="scripts/x.js"></script> 
    </head> 
    <body> 
    <script type="text/javascript"> 
     console.log($); 
    </script> 
    </body> 
</html> 

「scripts.x.js」:

var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = 'https://code.jquery.com/jquery-1.12.3.min.js'; 
script.async = false; 
script.defer = false; 
document.currentScript.parentNode.insertBefore(script, document.currentScript.nextSibling); 

這個腳本只是增加了一個新的外部腳本標記當前腳本之後,但它不工作,因爲'console.log'寫入錯誤'index.html:8 Uncaught ReferenceError:$未定義'。我究竟做錯了什麼?提前致謝!

+0

正如你可以看到我試圖動態地添加JQuery @RayonDabre – malcoauri

+0

那麼在這種情況下,你的JS的一些其他部分正在'jQ'加載之前執行... – Rayon

+0

我明白了,但爲什麼? 'scripts/x'在自己之後,在'console.log'之前添加JQ' – malcoauri

回答

0

問題是,由於JavaScript的異步I/O模型,腳本並沒有達到您的期望。您可能認爲該腳本將在加載jQuery時停止執行,然後在加載外部腳本(您的案例中的https://code.jquery.com/jquery-1.12.3.min.js)後繼續。

實際情況是,I/O操作由另一個線程完成,並且在JS解釋器到達console.log調用時,I/O尚未完成,因此$尚未初始化。

我建議你試試requirejs - 它處理異步加載外部腳本。

+0

是否有可能在沒有requirejs的情況下執行 – malcoauri