我的问题是我需要动态地包含来自另一个外部javascript文件的javascript文件。我正在尝试使用此功能:
function addCustomScriptTag(url) {
var scriptTag=document.createElement('script');
scriptTag.type = 'text/javascript';
scriptTag.src=url;
var myElement = document.getElementsByTagName("head")[0];
myElement.appendChild(scriptTag);
}
问题只发生在IE6中,试图附加到head元素会导致'operation aborted'错误。
任何帮助将不胜感激
答案 0 :(得分:2)
这取决于您将其添加到head DOM元素。操作在IE的所有版本中都会中止,因为您在DOM元素加载完成之前尝试通过JavaScript修改DOM元素http://support.microsoft.com/default.aspx/kb/927917。
如果您需要立即加载此脚本,您可以使用旧学校document.write添加脚本标记,例如
<head>
<script>document.write('<script src='yourUrl.js'><\/scr'+'ipt>');</script>
</head>
否则通过普通的旧JavaScript或jQuery文件等框架在onload中调用你的函数。
答案 1 :(得分:0)
然后将它附加到身体上。 Javascript不必专门用于&lt; head&gt;你的文件。
答案 2 :(得分:0)
考虑使用像jQuery这样的库,然后使用getScript
的等效(如果不使用jQuery)。这将在大多数情况下处理跨浏览器的怪癖和不一致。
答案 3 :(得分:0)
我从jQuery源代码窃取:
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = s.url;
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function(){
if ( !done && (!this.readyState ||
this.readyState == "loaded" || this.readyState == "complete") ) {
done = true;
success();
complete();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
head.removeChild( script );
}
};
head.appendChild(script);
答案 4 :(得分:-2)
我认为这是因为IE6不支持getElementsByTagName()
,请尝试将其替换为document.body
。