Manipulador ‘onload’ para tag ‘script’ no Internet Explorer

Eu tenho usado essa function para append o manipulador onload a uma tag de script, parece ser a maneira recomendada pela internet.
No entanto, ele não funciona no Internet Explorer, se a página já está carregada (testada em 8). Você pode ver que ele funciona em navegadores normais (alerta de incêndios quando o script é carregado).

Estou esquecendo de algo?
Obrigado

Você deve chamar o jQuery.getScript , que faz exatamente o que você está procurando.

Edição : Aqui está o código-fonte relevante do 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 ); 

Eu também tive problemas com script.onload = runFunction; no IE8.

Eu tentei jQuery.getScript e funcionou perfeitamente para as minhas necessidades. A única desvantagem é ter que esperar que o jQuery seja carregado antes de adicionar o script.

No entanto, como minhas funções de retorno de chamada utilizam o jQuery muito intensamente, acho que isso é uma desvantagem extremamente aceitável e muito pequena, já que ele cria uma solução cross-browser muito fácil de usar.

Atualizar:

Aqui está uma maneira de fazer isso sem usar o jQuery:

(uma solução modificada de: 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);