Событие JavaScript DOMContentLoaded не запускается в Internet Explorer
у меня есть следующий код, чтобы прикрепить функцию DOMContentLoaded
событие, но функция никогда не вызывается в Internet Explorer 11 и
код:
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", init, false);
}
else {
document.attachEvent("onDOMContentLoaded", init);
}
2 ответов
есть несколько причин, по которым он не может стрелять:
- он уже запущен (до того, как вы прикрепили обработчик событий), и вы его пропустили.
- вы используете более старую версию IE, которая не поддерживает
DOMContentLoaded
событие. - перед этими строками кода есть какая-то ошибка скрипта, поэтому эти строки кода фактически не выполняются, и поэтому обработчик событий никогда не регистрируется.
- вы пытаетесь сделать это на встроенном 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();
}