Обработчик 'onload' для тега script 'в Internet Explorer

Я использую эту функцию для прикрепления обработчика onload к тегу script, это, по-видимому, рекомендуется по Интернету.
Тем не менее, он не работает в Internet Explorer, если страница уже загружена (протестировано в 8). Вы можете видеть, что он работает в обычных браузерах (срабатывает предупреждение при загрузке script).

Я что-то упускаю?
Спасибо вам

Ответ 1

Вам следует позвонить jQuery.getScript, который точно соответствует вашему желанию.

EDIT. Вот соответствующий исходный код из 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 );

Ответ 2

У меня также были проблемы с script.onload = runFunction; в IE8.

Я попробовал jQuery.getScript, и он отлично работал для моих нужд. Единственным недостатком является ожидание загрузки jQuery перед добавлением в script.

Однако, поскольку мои функции обратного вызова очень сильно используют jQuery, я нахожу это чрезвычайно приемлемым и очень незначительным недостатком, поскольку он создает очень простое в использовании кросс-браузерное решение.

Update:

Вот способ сделать это, не используя jQuery:

(измененное решение от fooobar.com/info/43524/...)

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