我可以通过Javascript在页面上注册外部JS文件吗?

时间:2010-01-12 13:22:12

标签: javascript

在我的CMS中,我通过Javascript向页面添加模块,这些模块可能包含外部JS文件,这些文件在页面加载时注册到协作的外部文件中。

当通过JS添加模块时,因此在重新加载页面之前不会注册这些脚本。

我有办法通过javascript调用动态注册这些脚本吗?

2 个答案:

答案 0 :(得分:5)

您可以使用以下代码向页面添加脚本标记:

var head  = document.documentElement.childNodes[0];
var sTag  = document.createElement("script");
sTag.src  = "/path/to/script.js";
sTag.type = "text/javascript";
head.appendChild(sTag);

您还可以将document.getElementsByTagName("head")[0]用于head var。或者,您可以使用document.write,如下所示:

document.write(
    '<script src="path/to/script.js" type="text/javascript"><\/script>'
);

答案 1 :(得分:1)

我在jQuery的$.getScript方法的启发下创建了以下函数,它需要一个url和一个callback参数。

回调非常有用,它在成功加载脚本时执行,并且您已准备好使用它。

此函数还负责从DOM中删除script元素以避免众所周知的memory leaks

loadScript("myLib.js", function () {
  // myLib is loaded
  //..
});

function loadScript(url, callback) {
  var head = document.getElementsByTagName("head")[0],
      script = document.createElement("script"),
      done = false;

  script.src = url;
  // Attach event handlers for all browsers
  script.onload = script.onreadystatechange = function(){
    if ( !done && (!this.readyState ||
      this.readyState == "loaded" || this.readyState == "complete") ) {
      done = true;
      callback(); // Execute callback function
      // Prevent memory leaks in IE
      script.onload = script.onreadystatechange = null;
      head.removeChild( script );
    }
  };
  head.appendChild(script);
}