這個想法是在ready()函數完成後,讓用戶點擊一個按鈕。然後,它後面的java腳本代碼將運行ajax來檢索一些java腳本代碼片段(作爲文本),然後執行剛剛下載的代碼。是否可以通過ajax下載java腳本代碼片段,然後在運行時執行它?
可能嗎?任何框架都可以做到嗎?
這個想法是在ready()函數完成後,讓用戶點擊一個按鈕。然後,它後面的java腳本代碼將運行ajax來檢索一些java腳本代碼片段(作爲文本),然後執行剛剛下載的代碼。是否可以通過ajax下載java腳本代碼片段,然後在運行時執行它?
可能嗎?任何框架都可以做到嗎?
你甚至不需要ajax來做到這一點。您可以簡單地創建一個新的script
元素,將src
屬性設置爲您的JS文件並將其插入DOM(通常位於head
元素中)。
var script = document.createElement('script');
script.setAttribute('src', 'myfile.js');
document.head.appendChild(script);
嗨Tibos,我還沒有嘗試過上面的代碼。下載代碼片段會在加載DOM後運行嗎?我發現有人在運行時使用eval()來執行javascript代碼,但在Chrome上不可靠:(請參閱user1251840最後的評論,http://stackoverflow.com/questions/3248384/document-createelementscript-synchronously)。你知道任何框架可以做得更好嗎?謝謝。 – user3300681
片段內的代碼在下載後立即執行。但是,如果在這些代碼片段中設置了一個變量,則該變量在調用腳本中將不可用。 – Tibos
感謝Tibos爲我提供了線索。我用你的代碼來搜索我想要的東西,在這裏。
Jan Wolter描述了他在運行時動態加載和執行javascript的解決方案。 (http://unixpapa.com/js/dyna.html)。似乎動態JS加載的不穩定性與JS代碼文件大小有關。如果JS代碼文件很大,不同的瀏覽器可能會有不同的表現。揚提供了一種避免它的方法。 再次感謝。
是與eval()...你不需要一個框架。 – Cracker0dks
jQuery的[.getScript](https://api.jquery.com/jQuery.getScript/)是一個很好的幫手。 – freakish