在Internet Explorer中'脚本'标记的'onload'处理程序

我一直在使用这个函数将onload处理程序附加到脚本标记,似乎是通过互联网推荐的方法。
然而,它不工作在Internet Explorer中,如果页面已经加载(testingie 8)。 你可以看到它在正常的浏览器中工作(加载脚本时触发警报)。

我错过了什么吗?
谢谢

你应该调用jQuery.getScript ,这正是你在找什么。

编辑 :这里是从jQuery相关的源代码:

 var head = document.getElementsByTagName("head")[0] || document.documentElement; var script = document.createElement("script"); if ( s.scriptCharset ) { script.charset = s.scriptCharset; } script.src = s.url; // Handle Script loading var done = false; // Attach handlers for all browsers script.onload = script.onreadystatechange = function() { if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") ) { done = true; jQuery.handleSuccess( s, xhr, status, data ); jQuery.handleComplete( s, xhr, status, data ); // Handle memory leak in IE script.onload = script.onreadystatechange = null; if ( head && script.parentNode ) { head.removeChild( script ); } } }; // Use insertBefore instead of appendChild to circumvent an IE6 bug. // This arises when a base node is used (#2709 and #4378). head.insertBefore( script, head.firstChild ); 

我也有问题script.onload = runFunction; 在IE8中。

我试过jQuery.getScript,它完美地满足了我的需求。 唯一的缺点是不得不等待jQuery加载脚本之前加载。

不过,由于我的callback函数使用jQuery非常重,无论如何我觉得这是一个非常可接受的,非常小的缺点,因为它创build了一个非常容易使用,跨浏览器的解决scheme。

更新:

这是一个不使用jQuery的方法:

(修改后的解决scheme: https : //stackoverflow.com/a/13031185/1339954 )

 var url = 'http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js'; var headID = document.getElementsByTagName("head")[0]; var script = document.createElement('script'); script.type='text/javascript'; script.src=url; //for nonIE browsers script.onload=function(){ addVideo(); } //for IE Browsers ieLoadBugFix(script, function(){ addVideo();} ); function ieLoadBugFix(scriptElement, callback){ if (scriptElement.readyState=='loaded' || scriptElement.readyState=='completed') { callback(); }else { setTimeout(function() {ieLoadBugFix(scriptElement, callback); }, 100); } } headID.appendChild(script);