function init() {
// code to run on load...
}
if (document.readyState === 'loading') {
// document still loading...
document.addEventListener('DOMContentLoaded', () => {
init();
});
} else {
// already loaded, chocs away!
init();
}
А все эти грамотеи которые тут советы давали, их советы не имеют силы так как они не в курсе что иногда событие DOMContentLoaded может вызываться непредсказуемо.
1) Динамически загружаемые скрипты
Если скрипты загружаются асинхронно (async) или с отложенной загрузкой (defer), они могут повлиять на момент срабатывания события.
2) document.write()
Использование document.write() после загрузки страницы может перезаписать документ и вызвать повторное срабатывание.
3) IFrames
Вложенные фреймы имеют свои собственные события DOMContentLoaded, которые не синхронизированы с родительским документом.
4) Скрипты, блокирующие парсинг
Синхронные скрипты без async/defer могут задерживать событие.
5) Document.open()/close()
Эти методы могут вызывать повторную инициализацию документа.