2010-01-06 50 views
0

,我需要动态地包括从其他外部JavaScript文件中的JavaScript文件。我试图通过使用此功能来做到这一点:不能包括来自外部的JavaScript文件我的问题是JavaScript文件中IE6

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元素引起“操作中止”的错误。

任何帮助,将不胜感激

+1

在黑暗中拍摄,你可以尝试将其连接到身体呢? – 2010-01-06 14:50:23

+0

如果不设置type属性,会发生什么情况?如果你追加到身体呢?没有IE6来测试,对不起。 – 2010-01-06 14:52:57

+0

我在WinXP SP3中用IE6检查了这段代码:它的工作原理。 – ZippyV 2010-01-06 20:11:41

回答

0

追加到身体即可。 JavaScript不必专门在<头文件>中。

+0

如果追加到主体,错误仍然发生在IE6中,并将问题引入IE7。 – Ben 2010-01-06 14:51:44

+0

然后你又遇到了另一个问题,我只是通过包含一个具有alert('hi')的脚本来测试你的脚本;在IE6中工作正常。 – Erik 2010-01-06 14:54:04

+1

埃里克:我可以复制的问题,因为他所描述 – 2010-01-06 15:11:27

0

考虑使用像jQuery库,然后只用相当于(如果不使用jQuery)的getScript。这将大部分处理跨浏览器的怪癖和不一致。

+1

我们使用的是供应商的解决方案,我们无法编辑源代码。我们试图动态加载的是JQuery – Ben 2010-01-06 14:53:58

-2

我想这是因为IE6不支持getElementsByTagName(),尝试用document.body替换它。

2

这取决于当你将它添加到头部DOM元素。在IE的所有版本中都会发生操作中止,因为您试图在该DOM元素加载完成之前通过JavaScript修改DOM元素,http://support.microsoft.com/default.aspx/kb/927917

如果需要此脚本加载向右走,你可以做一个老同学的文件撰写添加脚本标签,例如

<head> 
     <script>document.write('<script src='yourUrl.js'><\/scr'+'ipt>');</script> 
</head> 

否则通过普通的旧JavaScript或通过像jQuery a la document.ready这样的框架在正文中调用函数。

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