Я хочу запустить немного javascript перед загрузкой всей страницы. Это возможно? Или код запускается на </html>
?
Можно ли запустить javascript перед загрузкой всей страницы?
Ответ 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, до того, как будет загружена вся страница.