在JavaScript函数中导入JavaScript文件

23

可能的重复问题: 在JavaScript文件中包含一个JavaScript文件 如何在另一个JavaScript文件中包含JavaScript文件?

在JavaScript function()中导入JavaScript文件,例如file.js,最好的方法是什么?

例如,替换待办事项语句的最佳方法是什么:

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

可能最好的解决方案是创建脚本元素并将其添加到HTML页面中。

  • 将其添加/附加到head还是body中更好(什么时候加载)?
  • 使用JavaScript还是jQuery更好(哪个跨浏览器兼容性更好)?

是的,但已经有很多答案了。我不确定将脚本添加到头部、正文(何时加载)中更好,使用jQuery还是标准JavaScript(哪个更跨浏览器兼容)。 - Matej Tymes
4个回答

7

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

or

(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);
    }
}

好的,我使用了jQuery风格:$.getScript('xyz.js', function() {}); 谢谢。 - Matej Tymes

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

应该这样做


2
非常简单,在JavaScript中创建一个<script>元素,将src属性附加到URL,并附加到DOM。就这样。

2

你需要将代码变成异步的才能获得以下好处:

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);

为什么不应该使用appendChild? - Matej Tymes
1
如果<head>部分中有一个作为<head>的最后一个子元素的<base>元素,那么在IE6中使用appendChild会导致错误行为,即整个DOM被附加到<base>元素中 :) - otakustay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接