Подтвердить что ты не робот

Можно ли запустить javascript перед загрузкой всей страницы?

Я хочу запустить немного javascript перед загрузкой всей страницы. Это возможно? Или код запускается на </html>?

4b9b3361

Ответ 1

Не только вы, но вы должны приложить особые усилия, чтобы не делать этого, если не хотите. :-)

Когда браузер обнаруживает тег script при разборе HTML, он прекращает анализ и передает интерпретатор Javascript, который запускает сценарий. Синтаксический анализатор не продолжается до тех пор, пока выполнение скрипта не будет завершено (поскольку скрипт может выполнять вызовы document.write для вывода разметки, которую должен обрабатывать синтаксический анализатор). Это поведение по умолчанию; Существуют атрибуты тега script которые изменяют это поведение ( defer и async) (и поскольку они изменяют его, сценарии, загруженные с defer или async не могут использовать document.write для вывода HTML на загружаемую страницу).

Итак, рассмотрим это:

<p>Line 1</p>
<script>
    alert("Paragraphs: " + document.getElementsByTagName("p").length);
</script>
<p>Line 2</p>

Ответ 2

Вы можете запустить javascript-код в любое время. AFAIK выполняется в момент, когда браузер достигает <script> где он находится. Но вы не можете получить доступ к тем элементам, которые еще не загружены.

Итак, если вам нужен доступ к элементам, вам нужно подождать, пока загрузится DOM (это не означает, что загружается вся страница, включая изображения и прочее. Это только структура документа, загружаемая намного раньше, вы обычно не заметите задержку), используя DOMContentLoaded событие или функции, такие как $.ready в jQuery.

Ответ 3

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