2011-05-05 74 views
7

可能重複: Include a JavaScript file in a JavaScript file How to include a JavaScript file in another JavaScript file?導入JavaScript文件

什麼是導入一個JavaScript文件,例如file.js的最佳方式,在JavaScript函數()?

例如,什麼是替代TODO語句的最佳方式:

function doSomething() { 
    if (xy.doSomething == undefined) { 
     // TODO: load 'oldVersionPatch.js' 
    } 
    ... 
} 

可能是最好的解決方案是創建腳本元素,並將其添加到HTML頁面。

  • 添加/追加到頭部或身體(什麼時候會加載)是更好嗎?
  • 使用JavaScript還是使用jQuery(什麼是跨瀏覽器兼容)更好?
+0

是的,但有已經有很多答案。我不知道是否最好將腳本添加到頭部,body(什麼時候會加載),使用jquery或標準javascript(什麼是跨瀏覽器兼容) – 2011-05-05 10:32:12

回答

4

http://api.jquery.com/jQuery.getScript/

(function(){ 
    this.__defineGetter__("__FILE__", function() { 
    return (new Error).stack.split("\n")[2].split("@")[1].split(":").slice(0,-1).join(":"); 
    }); 
})(); 

(function(){ 
    this.__defineGetter__("__DIR__", function() { 
    return __FILE__.substring(0, __FILE__.lastIndexOf('/')); 
    }); 
})(); 

function include(file,charset) { 
    if (document.createElement && document.getElementsByTagName) { 
     var head = document.getElementsByTagName('head')[0]; 
     var script = document.createElement('script'); 
     script.setAttribute('type', 'text/javascript'); 
     script.setAttribute('src', __DIR__ + '/' + file); 
     if(charset){ 
      script.setAttribute('charset', charset); 
     } 
     head.appendChild(script); 
    } 
} 
+0

好的,我使用了jquery樣式:$ .getScript('xyz.js',function(){});謝謝。 – 2011-05-05 10:38:29

1

很簡單,在JavaScript創建<script>元,追加src屬性與任何的URL是和連接到DOM。這應該做到這一點。

4
var filename = 'oldVersionPatch.js'; 
    var js = document.createElement('script'); 
    js.setAttribute("type","text/javascript"); 
    js.setAttribute("src", filename); 
    document.getElementsByTagName("head")[0].appendChild(js); 

..應該這樣做

1

你必須使你的代碼異步獲得這樣的:

var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = yourJavascriptFileLocation; 
script.onload = script.onreadystatechange = function() { 
    if (!script.readyState || script.readyState === 'complete') { 
     /* Your code rely on this JavaScript code */ 
    } 
}; 
var head = document.getElementsByTagName('head')[0]; 
// Don't use appendChild 
head.insertBefore(script, head.firstChild); 
+0

爲什麼我不應該使用appendChild? – 2011-05-05 10:29:18

+1

如果在''的最後一個子節點''中有''元素,那麼IE6中的appendChild會導致錯誤的行爲,也就是說,整個DOM被附加到''元素: ) – otakustay 2011-05-05 10:31:32