Функция Vanilla JS ready() — что такое document.documentElement.доСкролл?

#javascript #document-ready

#javascript #документ-готов #документ готов

Вопрос:

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

Мне нужна как можно более простая функция, готовая к использованию на чистом JavaScript, которая запускается при полной загрузке страницы, аналогичная функции jQuery $(document).ready() .

Я продолжаю находить этот пример:

 if (document.readyState === "complete" || (document.readyState !== "loading" amp;amp; !document.documentElement.doScroll)) {
    // Document already fully loaded
    ready();
} else {
    // Add event listener for DOMContentLoaded (fires when document is fully loaded)
    document.addEventListener("DOMContentLoaded", ready);
}

function ready() {
    // Handler here
}
  

но веб-сайты, приводящие этот пример, всегда говорят о поддержке более старых версий IE, а мне это не нужно. Я хочу поддерживать только современные браузеры (Chromium Edge, Chrome, Firefox, Opera и Safari) и надеюсь найти более простое решение, особенно в части document.readyState !== "loading" amp;amp; !document.documentElement.doScroll . Кажется, я не могу найти много информации о document.documentElement.doScroll , по крайней мере, не из надежных источников, таких как MDN, поэтому я не знаю точно, что он делает, или если удаление этого может привести к сбою функции ready в определенных крайних случаях.

Я думаю, что я спрашиваю вот о чем:

Безопасно ли удалять document.readyState !== "loading" amp;amp; !document.documentElement.doScroll из примера кода, и есть ли еще лучшие способы сделать это сейчас, когда вас интересуют только текущие основные браузеры (перечисленные выше)?

Ответ №1:

Похоже, что doScroll — это работа с IE. Проверка readyState полезна, поскольку событие DOMContentLoaded не сработает, если оно уже произошло. Итак, если вам не нужна поддержка IE, я бы сказал, что вы можете удалить проверку doScroll, оставив вам:

 if (document.readyState === "complete") {
    // Document already fully loaded
    ready();
} else {
    // Add event listener for DOMContentLoaded (fires when document is fully loaded)
    document.addEventListener("DOMContentLoaded", ready);
}

function ready() {
    // Handler here
}
  

Комментарии:

1. Спасибо вам за подтверждение моих подозрений о том, что это был IE specific. Я пришел к тому же выводу, поэтому сейчас чувствую себя немного увереннее, используя его.