Событие JavaScript DOMContentLoaded не запускается в Internet Explorer

у меня есть следующий код, чтобы прикрепить функцию DOMContentLoaded событие, но функция никогда не вызывается в Internet Explorer 11 и

код:

if (document.addEventListener) {
   document.addEventListener("DOMContentLoaded", init, false);
}
else {
   document.attachEvent("onDOMContentLoaded", init);
}

2 ответов


есть несколько причин, по которым он не может стрелять:

  1. он уже запущен (до того, как вы прикрепили обработчик событий), и вы его пропустили.
  2. вы используете более старую версию IE, которая не поддерживает DOMContentLoaded событие.
  3. перед этими строками кода есть какая-то ошибка скрипта, поэтому эти строки кода фактически не выполняются, и поэтому обработчик событий никогда не регистрируется.
  4. вы пытаетесь сделать это на встроенном iFrame и может не иметь правильного документа для iFrame (некоторые браузеры могут переключать документ при загрузке внешнего источника).

чтобы проверить наличие ошибок сценария, откройте консоль отладки в IE (нажмите F12) и посмотрите на консоль, чтобы увидеть, если какие-либо ошибки сценария сообщаются.

вы можете проверить, если document.readyState === "complete" чтобы увидеть, если он уже уволен.

и, в версиях IE до IE9, где вам понадобится attachEvent, IE не поддерживает DOMContentLoaded Так что ваша ветка else не будет работать. Вам придется использовать различные методы обнаружения в этих старых версиях IE.

вы можете увидеть хорошо протестированную, кросс-браузерную, простую функцию javascript для получения уведомления, когда документ будет готов здесь:чистый JavaScript, эквивалентный $jQuery.ready () как вызвать функцию, когда страница/dom готова к ней.


чтобы разбить это на работоспособный пример, см. ниже. Этот вопрос я обнаружил, что DOMContentLoaded не будет стрелять для javascript Если событие не создано встроенным в самом документе.

простым решением для этого является добавление чека в документ readyState. Если он все еще загружается-создайте событие, потому что это возможно для DOMContentLoaded стрелять-в противном случае просто загрузите сразу, потому что DOM готов.

var load = function () {
    console.log('I will always load, woohoo');
};

if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', load); // Document still loading so DomContentLoaded can still fire :)
} else {
    load();
}