簡體   English   中英

動態地同步加載來自不同域的JavaScript文件

[英]Dynamically and synchronously load JavaScript file from a different domain

我想通過代碼同步包含來自不同域的JavaScript文件。 這意味着使用同步XMLHttpRequest將無法正常工作。 我還想避免使用document.write因為我的代碼將在文檔完全加載時執行。 這甚至可能嗎? 是否有任何現有的JavaScript庫支持該功能?

基本上我希望這個工作:

<script type="text/javascript">
  $(document).ready(function() {
      load("path_to_jQuery_UI_from_another_domain");
      console.log(jQuery.ui.version); //outputs the version of jQuery UI
  });
</script>

編輯:我的想法是創建一個jQuery插件,根據啟用的功能加載其JavaScript文件。 jQuery插件可以隨時初始化,這意味着沒有document.write。 完全可以異步加載JavaScript文件,但人們希望在調用$("selector").something();之后完全初始化它們的插件$("selector").something(); 因此需要在沒有document.write的情況下加載同步JavaScript。 我想我只是想要太多。

同步加載文件的唯一方法是document.write腳本標記到您的頁面。 這通常被認為是一種不好的做法。 可能有更好的方法來做你真正想要的事情,但是,本着透明的精神:

document.write('<script src="http://otherdomain.com/script.js"></'+'script>')

應該做的伎倆。 您必須轉義結束腳本標記,以便解析器不會關閉您編寫的腳本標記。

**請注意,您無法動態加載包含document.write腳本

你應該可以使用.getScript()

編輯:跨域請求總是在jQuery中異步加載。

一個名為YepNope的大型庫可用於從任何位置加載javascript依賴項 - 由yayQuery播客的成員開發。 它可以在這里找到:http: //yepnopejs.com/

LABjs.js,是一個不錯的圖書館。 我用它效果很好。

http://labjs.com/

無法在URL上同步執行腳本。 進一步注意,當涉及網絡(甚至文件系統!)時,同步任何東西都是一個壞主意。 某個人,某個時候,某個地方將處於一個緩慢的系統,或一個緩慢的網絡,或兩者兼而有之,突然間你只是在這個過程中掛起他們的UI。

同步很糟糕。 異步回調很好。

請注意,作為最壞情況的黑客,您可以使用自己的函數覆蓋$ ,該函數返回具有恰當屬性的對象,並且您可以半懶惰地評估所有實際調用。 如果你開始依賴於立即執行調用,或者他們的執行與參數的評估混合在一起,這當然會中斷,但在最壞的情況下,它並非完全不可信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM