Тег <script>
- Категории: Мета-содержимое, Потоковое содержимое, Фразовое содержимое
-
Контекст:
Где ожидаются метаданные, или фразовое содержимое.
-
Модель:
Если есть атрибут
src
, то содержимое должно быть пустым. Если атрибутаsrc
нет, то зависит от значения атрибутаtype
.
Тег <script>
(от англ. "script" - сценарий) предназначен для подключения к странице динамических сценариев (скриптов) или блоков данных. По умолчанию предполагается, что сценарий написан на языке JavaScript, который встроен в любой браузер по умолчанию.
При помощи атрибута src
мы можем подключить сценарий, расположенный в другом файле. Содержимое тега при этом необходимо оставить пустым. Если атрибута src
нет, значит сценарий должен быть написан непосредственно в качестве содержимого элемента.
Количество сценариев на странице ничем не ограничено. Все они будут выполняться в порядке их расположения в документе. Используя атрибуты defer
и async
, загрузкой сценариев можно управлять.
Атрибуты
- Глобальные атрибуты
-
src
- адрес сценария -
type
- тип встроенного сценария -
charset
- кодировка символов внешнего сценария -
async
- выполнять сценарий параллельно -
defer
- отложить выполнение сценария -
crossorigin
- как следует обрабатывать сценарий, полученный из другого источника (с другого домена) -
nonce
- криптографический одноразовый номер, используемый при проверке политики безопасности контента
-
Встроенный сценарий
Сценарий может быть написан непосредственно внутри элемента
<script>
. Это позволит выполнить его на текущей странице: -
Внешний сценарий
При помощи атрибута
src
, сценарий может быть подключен из внешнего файла. Это позволяет использовать его на всех страницах, а также кешировать для более быстрой загрузки. В этом случае мы также используем парный тег, но содержимого между ними быть не должно: -
Асинхронное выполнение
Как только браузер находит элемент
<script>
, он блокирует отрисовку страницы и начинает выполнение сценария. Если сценарий занимает много времени, это может привести к недоступности страницы для пользователя. Чтобы это исправить, мы можем добавить сценарию атрибутasync
. В таком случае он не заблокирует отрисовку страницы. Вместо этого сценарий будет извлекаться параллельно синтаксическому анализу документа и выполнен в момент готовности. При подключении нескольких асинхронных скриптов, мы не можем гарантировать последовательность их выполнения. -
Отложенное выполнение
Атрибут
desc
также позволяет избежать блокирования страницы и извлечь сценарий асинхронно. Только выполнение такого сценария будет отложено до окончания синтаксического анализа документа.