在我的CMS中,我通过Javascript向页面添加模块,这些模块可能包含外部JS文件,这些文件在页面加载时注册到协作的外部文件中。
当通过JS添加模块时,因此在重新加载页面之前不会注册这些脚本。
我有办法通过javascript调用动态注册这些脚本吗?
答案 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);
}