自動加載外部 JavaScript 文件

雖說標題叫《自動加載外部 JavaScript 文件》,其實還未達到 PHP 那樣在程序中只要遇到新的類名就自動加載類定義文件的程度,還需要指定文件名才能加載外部 JavaScript 文件,但是這對 JavaScript 應該已經夠了。如果外部 JavaScript 文件比較多時,用這個還是比較方便的。詳細說明用使用方法請見源碼中的註釋。

 

/* Copyright 2009 Snowpeak.org
* 文件名: autoload.js
* 摘  要: 批量加載外部 JS 文件
* 作  者: 薛峯
使用方法:
在 HTML 頁的 head 段內加上形如:
<script type="text/javascript" src="autoload.js?a,js/b,other/c"></script>
外部 JS 文件路徑羅列作 autoload.js? 後面的參數,用逗號分隔開,不用加 .js 後綴,這些路徑應該是相對於引用它們的 HTML 頁的,而非 autoload.js 這個文件。
即可創建出相應的 script 標記:
<script type="text/javascript" src="a.js"/>
<script type="text/javascript" src="js/b.js"/>
<script type="text/javascript" src="other/c.js"/>
說明:
1. 純匿名函數,不添加任何全局變量。
2. IE 和 Firefox 在加載 JS 文件後生成的 DOM 節點順序都一樣,如 autoload.js?a,b,c 生成的3個 script 標記順序也是 a、b、c,但是相同它們執行的順序卻不同,IE 是順序執行的,而 Firefox 是倒序執行,即 c、b、a 的順序。
*/
(function(){
 var scripts = document.getElementsByTagName("script");
 //必須用 for 循環才能循環得到 scripts 數組的各個元素,用 for in 循環得到的是 scripts 數組自身的屬性。
 for (var i=0;i<scripts.length;i++)
 {
  if (scripts[i].src)
  {
   //匹配 src 值帶 autoload.js? 字樣的,並記住其後的參數,如 src="autoload.js?a,ch04get" 中的 a,ch04get
   var jsArgs = scripts[i].src.match(/autoload.js/?(/S+)/);
  }
 }
 if (jsArgs)
 {
  var jsFiles = jsArgs[1].split(',');
  var oHead = document.getElementsByTagName('head')[0];

  for (i=0; i<jsFiles.length;i++)
  {
   var oScript = document.createElement('script');
   oScript.type = "text/javascript";
   //默認外部 JS 文件的路徑應該是相對於調用此 autoload.js 的 HTML 頁的相對路徑。再給文件名加上 .js 的後綴。
   oScript.src = jsFiles[i]+'.js';
   oHead.appendChild(oScript);
  }
 }
}
)()

發佈了52 篇原創文章 · 獲贊 7 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章