This page was translated from English by the community. Learn more and join the MDN Web Docs community.
<script>: элемент для написания скриптов
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
* Some parts of this feature may have varying levels of support.
HTML-элемент <script> используется для встраивания или подключения исполняемого JavaScript кода. Элемент <script> также может использоваться с другими языками, такими как GLSL от WebGL.
| Content categories | Метаданные, Потоковый контент, Фразовый контент. |
|---|---|
| Допустимый контент | Динамический скрипт, используя атрибут text/javascript. |
| Пропуск тегов | Нет. Открывающий и закрывающий теги обязательны |
| Допустимые родители | Любые элементы в которых разрешены метаданные или фразовый контент |
| Допустимые ARIA-роли | нет |
| DOM-интерфейс | HTMLScriptElement |
Атрибуты
Этот элемент включает глобальные атрибуты.
async-
Это логический атрибут, указывающий браузеру, если возможно, загружать скрипт, указанный в атрибуте
src, асинхронно.Предупреждение: Атрибут
asyncне будет оказывать никакого эффекта, если атрибутsrcотсутствует. Обычно браузеры загружают<script>синхронно, (т.е.async="false") во время разбора документа. Динамически вставленный<script>(используя, например,document.createElement) по умолчанию загружаются браузером асинхронно, поэтому для включения синхронной загрузки (т.е. когда скрипты загружаются в порядке их вставки) укажитеasync="false". crossorigin-
Обычные элементы тега
scriptпередают мало информации вwindow.onerrorдля скриптов, которые не проходят проверку CORS. Чтобы разрешить ведение журнала ошибок сайта, которые используют отдельный домен для статических файлов (например, изображение, видео-файл, CSS-стили или Javascript-код), используйте атрибутcrossorigin. Посмотрите статью «настройки атрибутов CORS» для более наглядного объяснения его допустимых аргументов. defer-
Это логический атрибут, указывающий браузеру, что скрипт должен выполняться после разбора документа, но до события
DOMContentLoaded. Скрипты с атрибутомdeferбудут предотвращать запуск событияDOMContentLoadedдо тех пор, пока скрипт не загрузится полностью и не завершится его инициализация.Предупреждение: Атрибут
deferне будет оказывать никакого эффекта, если атрибутsrcотсутствует. Чтобы достигнуть такого же эффекта для динамически вставленных скриптов используйтеasync=false. Скрипты с атрибутомdeferбудут выполняться в том порядке, в котором они появились при разборе документа. integrity-
Этот атрибут содержит встроенные метаданные, которые агент пользователя (браузер) может использовать для проверки того, что выбранный ресурс был доставлен без непредвиденных манипуляций. Смотрите Целостность субресурса.
nomodule-
Булевый атрибут, который устанавливается для того, чтобы скрипт не выполнялся в браузерах, поддерживающих ES6-модули (англ.). Таким образом, может быть использован для предоставления резервных сценариев в старых браузерах, которые не поддерживают модульный код JavaScript.
nonce-
Криптографический одноразовый номер (номер, используемый один раз) для внесения встроенных скриптов в белый список в script-src Content-Security-Policy. Сервер должен генерировать уникальное одноразовое значение каждый раз, когда он передает политику. Крайне важно предоставить одноразовый номер, который нельзя угадать, поскольку в противном случае обход политики ресурса является тривиальным.
src-
Определяет URI внешнего скрипта; является альтернативой встраиванию скрипта непосредственно в документ.
Предупреждение: Если у элемента
scriptбудет указан атрибутsrc, то он не должен иметь встроенный скрипт между тегами. text-
Как и атрибут
textContent, этот атрибут задает текстовое содержимое элемента. Однако, в отличие от атрибутаtextContent, этот атрибут оценивается как исполняемый код после того, как узел вставлен в DOM. type-
Этот атрибут указывает тип представленного скрипта. Значение этого атрибута будет находиться в одной из следующих категорий:
- Атрибут не установлен (по-умолчанию), пустая строка или установлен как MIME-тип JavaScript
- : Обозначает, что скрипт является "классическим скриптом", содержащим JavaScript-код. Рекомендуется не указывать MIME-тип, а пропускать атрибут вообще. MIME-типы JavaScript указаны в спецификации.
module- : Данное значение даёт браузеру инструкцию, что код является JavaScript-модулем.
Обработка содержимого скрипта отложенная.
Атрибуты
charsetиdeferигнорируются. Для дополнительной информации по использованиюmodule, смотрите руководство по JavaScript-модулям. В отличие от классических скриптов, модули требуют использования CORS-протокола для кроссдоменных запросов.
- : Данное значение даёт браузеру инструкцию, что код является JavaScript-модулем.
Обработка содержимого скрипта отложенная.
Атрибуты
importmap- : Данное значение сигнализирует о том, что содержимое тега является словарём импортов. Словарь импортов - это JSON-объект, который может использоваться для задания алиасов при импорте JavaScript-модулей.
- Любое другое значение: Встроенный контент обрабатывается как блок данных, который не будет обрабатываться браузером. Разработчики должны использовать допустимый тип MIME, который не является типом MIME JavaScript, для обозначения блоков данных. Атрибут
srcбудет проигнорирован.
- Атрибут не установлен (по-умолчанию), пустая строка или установлен как MIME-тип JavaScript
Устаревшие атрибуты
charsetУстарело-
Если присутствует, его значение должно соответствовать "utf-8" без учета регистра ASCII. И в том, и в другом случае нет необходимости указывать атрибут charset, поскольку документы должны использовать UTF-8, а элемент script наследует свою кодировку символов от документа.
languageУстарело Не стандартно-
Как и атрибут
type, этот атрибут определяет используемый язык сценариев. Однако, в отличие отtype, возможные значенияlanguageникогда не были стандартизированы. Вместо него следует использовать атрибутtype.
Примечания
Элемент <script> без указания атрибутов async , defer или type="module", а также встроенный скрипт, загружается и выполняется сразу, до того как браузер продолжит разбор документа.
Для обработки скрипт должен иметь тип данных text/javascript, но браузеры снисходительны и блокируют обработку только в том случае, если скрипт представляет данные одного из типов: изображение (image/*); видео (video/*); аудио (audio/*); или text/csv. Если скрипт заблокирован, элементу отправляется событие error, если не было отправлено событие load.
Примеры
>Основное использование
Эти примеры показывают как импортировать скрипт используя элемент <script> в HTML4 и HTML5.
<!-- HTML4 -->
<script type="text/javascript" src="javascript.js"></script>
<!-- HTML5 -->
<script src="javascript.js"></script>
Фолбэк-модуль
Браузеры, поддерживающие использование значения module для атрибута type, игнорируют любые скрипты с атрибутом nomodule. Это разрешает использовать модульные скрипты, и в тот же самый момент позволяет использовать nomodule-скрипты для браузеров без поддержки модульных скриптов.
<script type="module" src="main.mjs"></script>
<script nomodule src="fallback.js"></script>
Спецификации
| Specification |
|---|
| HTML> # the-script-element> |
Совместимость с браузерами
Loading...