无法在IE6中包含来自外部javascript文件的javascript文件

时间:2010-01-06 14:48:44

标签: javascript internet-explorer-6

我的问题是我需要动态地包含来自另一个外部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'错误。

任何帮助将不胜感激

5 个答案:

答案 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