IE иногда не срабатывает при загрузке! - PullRequest
2 голосов
/ 26 декабря 2010

У меня есть этот код, загруженный в сценарий в теле.

(function() {
attach = function() {
       blablablablbalabl;
};

if (window.addEventListener){  
    window.addEventListener('load', attach, false);   
} else if (window.attachEvent){      
    window.attachEvent('onload', attach);  
}  
})();

Проблема в том, что иногда (4 из 5 попыток) я обновляю IE, это не будет делать attach ()!в то время как в других браузерах он вызывает 100% случаев!

Я схожу с ума!

Спасибо

Ответы [ 3 ]

1 голос
/ 26 декабря 2010

jQuery использует несколько приемов для решения этой проблемы.

Он присоединяется к onreadystatechange, а также onload.

    // If IE event model is used
    } else if ( document.attachEvent ) {
        // ensure firing before onload,
        // maybe late but safe also for iframes
        document.attachEvent("onreadystatechange", DOMContentLoaded);

        // A fallback to window.onload, that will always work
        window.attachEvent( "onload", jQuery.ready );

        // If IE and not a frame
        // continually check to see if the document is ready
        var toplevel = false;

        try {
            toplevel = window.frameElement == null;
        } catch(e) {}

        if ( document.documentElement.doScroll && toplevel ) {
            doScrollCheck();
        }
    }

Кроме того, он постоянно проверяет,страницу можно прокрутить.После загрузки DOM страница становится прокручиваемой, и, таким образом, запускается jQuery.ready.

// The DOM ready check for Internet Explorer
function doScrollCheck() {
    if ( jQuery.isReady ) {
        return;
    }

    try {
        // If IE is used, use the trick by Diego Perini
        // http://javascript.nwbox.com/IEContentLoaded/
        document.documentElement.doScroll("left");
    } catch(e) {
        setTimeout( doScrollCheck, 1 );
        return;
    }

    // and execute any waiting functions
    jQuery.ready();
}

Вы можете попробовать реализовать это поведение в своем приложении или напрямую использовать jQuery.

0 голосов
/ 26 декабря 2010

Недавно я столкнулся с чем-то похожим, когда внешний скрипт, который настраивал слушателя на событие загрузки, не запускался в IE.

Я заметил, что если я вставлю скрипт в тело документа, он будет срабатывать надежно.Приведите меня к мысли, что это было какое-то состояние гонки, когда событие onload сработало до того, как внешний скрипт был полностью проанализирован.

Другие вещи, которые нужно проверить, - есть ли другой сценарий, отменяющий распространение события, и является ли вашфункция обратного вызова выдает исключение в IE, например, неправильно полагая, что «this» указывает на

0 голосов
/ 26 декабря 2010

Будет ли это работать?

(function() {
var callback = null;
attach = function() {
       blablablablbalabl;
       callback.apply();

};
callback = window.onload;
window.onload = attach;
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...