HTMLScriptElement
Базовая Широко доступная *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Элементы HTML <script> экспонируют интерфейс HTMLScriptElement, который предоставляет специальные свойства и методы для управления поведением и выполнением элементов <script> (помимо унаследованного интерфейса HTMLElement).
Файлы JavaScript должны быть предоставлены с типом MIME text/javascript, но браузеры проявляют снисходительность и блокируют их только в том случае, если скрипт предоставлен с типом изображения (image/*), видео (video/*), аудио (audio/*) или text/csv. Если скрипт заблокирован, его элемент получает событие error; в противном случае — событие load.
Свойства экземпляра
Наследует свойства от родительского класса HTMLElement.
-
HTMLScriptElement.attributionSrcБезопасный контекст Экспериментальная -
Получает и устанавливает атрибут
attributionsrcдля элемента<script>программно, отражая значение этого атрибута.attributionsrcуказывает, что браузеру нужно отправлять заголовокAttribution-Reporting-Eligibleвместе с запросом на ресурс скрипта. На стороне сервера это используется для отправки заголовкаAttribution-Reporting-Register-SourceилиAttribution-Reporting-Register-Triggerв ответе для регистрации источника атрибуции на базе JavaScript или триггера атрибуции соответственно. HTMLScriptElement.async-
Булево значение, контролирующее, как должен выполняться скрипт. Для классических скриптов, если свойство
asyncустановлено вtrue, внешний скрипт будет загружен параллельно с парсингом и оценён, как только он станет доступен. Для модульных скриптов, если свойствоasyncустановлено вtrue, скрипт и все его зависимости будут загружены параллельно с парсингом и оценены, как только они станут доступными. HTMLScriptElement.blocking-
Строка, указывающая, что некоторые операции должны быть заблокированы при загрузке скрипта. Она отражает атрибут
blockingэлемента<script>. HTMLScriptElement.charsetУстаревший-
Строка, представляющая кодировку символов внешнего скрипта. Она отражает атрибут
charset. HTMLScriptElement.crossOrigin-
Строка, отражающая настройку CORS для элемента скрипта. Для классических скриптов из других источников это управляет отображением информации об ошибках.
HTMLScriptElement.defer-
Булево значение, контролирующее выполнение скрипта. Для классических скриптов, если свойство
deferустановлено вtrue, внешний скрипт будет выполнен после разбора документа, но перед срабатыванием событияDOMContentLoaded. Для модульных скриптов, свойствоdeferне оказывает влияния. HTMLScriptElement.eventУстаревший-
Строка; устаревший способ регистрации обработчиков событий для элементов в HTML-документе.
HTMLScriptElement.fetchPriority-
Необязательная строка, представляющая подсказку для браузера о том, как следует приоритизировать загрузку внешнего скрипта относительно других внешних скриптов. Если это значение предоставлено, оно должно быть одним из допустимых значений:
highдля загрузки с высоким приоритетом,lowдля загрузки с низким приоритетом илиautoдля обозначения отсутствия предпочтения (что является значением по умолчанию). Она отражает атрибутfetchpriorityэлемента<script>. HTMLScriptElement.integrity-
Строка, содержащая встроенные метаданные, которые браузер может использовать для проверки того, что полученный ресурс был доставлен без непредвиденных изменений. Она отражает атрибут
integrityэлемента<script>. HTMLScriptElement.noModule-
Булево значение, которое, если истинно, останавливает выполнение скрипта в браузерах, поддерживающих модули ES — используется для запуска резервных скриптов в старых браузерах, которые НЕ поддерживают модули JavaScript.
HTMLScriptElement.referrerPolicy-
Строка, которая отражает атрибут
referrerPolicyHTML, указывающий, какой реферер использовать при загрузке скрипта и загрузках, выполненных этим скриптом. HTMLScriptElement.src-
Строка, представляющая URL внешнего скрипта; это может быть использовано как альтернатива встраиванию скрипта непосредственно в документ. Она отражает атрибут
srcэлемента<script>. HTMLScriptElement.text-
Строка, которая объединяет и возвращает содержимое всех узлов
Textвнутри элемента<script>(игнорируя другие узлы, такие как комментарии) в порядке обхода дерева. При установке она действует так же, как свойствоNode.textContent.Примечание: При вставке с помощью метода
Document.write(), элементы<script>выполняются (обычно синхронно), но при вставке с помощьюElement.innerHTMLилиElement.outerHTMLони вообще не выполняются. HTMLScriptElement.type-
Строка, представляющая тип скрипта. Она отражает атрибут
typeэлемента<script>.
Статические методы
HTMLScriptElement.supports()-
Возвращает
true, если браузер поддерживает скрипты указанного типа, иfalse, в противном случае. Этот метод предоставляет простой и унифицированный метод для обнаружения функциональности, связанной со скриптами.
Методы экземпляра
Нет конкретных методов; наследует методы от родительского класса HTMLElement.
События
Нет специфических событий; наследует события от своего родителя, HTMLElement.
Примеры
Динамическая импортация скриптов
Давайте создадим функцию, которая импортирует новые скрипты в документ, создавая узел <script> непосредственно перед <script>, который содержит следующий код (через document.currentScript). Эти скрипты будут выполняться асинхронно. Для получения более подробной информации см. свойства defer и async.
function loadError(oError) {
throw new URIError(`The script ${oError.target.src} didn't load correctly.`);
}
function prefixScript(url, onloadFunction) {
const newScript = document.createElement("script");
newScript.onerror = loadError;
if (onloadFunction) {
newScript.onload = onloadFunction;
}
document.currentScript.parentNode.insertBefore(
newScript,
document.currentScript,
);
newScript.src = url;
}
В следующей функции, вместо добавления новых скриптов непосредственно перед элементом document.currentScript, они добавляются как дочерние элементы тега <head>.
function loadError(oError) {
throw new URIError(`The script ${oError.target.src} didn't load correctly.`);
}
function affixScriptToHead(url, onloadFunction) {
const newScript = document.createElement("script");
newScript.onerror = loadError;
if (onloadFunction) {
newScript.onload = onloadFunction;
}
document.head.appendChild(newScript);
newScript.src = url;
}
Пример использования:
affixScriptToHead("myScript1.js");
affixScriptToHead("myScript2.js", () => {
alert('The script "myScript2.js" has been correctly loaded.');
});
Проверка поддержки типа скрипта
HTMLScriptElement.supports() предоставляет унифицированный механизм для проверки того, поддерживает ли браузер определенные типы скриптов.
В приведенном ниже примере показано, как проверить поддержку модулей, используя наличие атрибута noModule в качестве резервного варианта.
function checkModuleSupport() {
if ("supports" in HTMLScriptElement) {
return HTMLScriptElement.supports("module");
}
return "noModule" in document.createElement("script");
}
Предполагается, что классические скрипты поддерживаются во всех браузерах.
Спецификации
| Спецификация |
|---|
| HTML # htmlscriptelement |
Совместимость браузеров
| Настольные | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
HTMLScriptElement |
1 | 12 | 1 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | ≤37 |
async |
6 | 12 | 3.6 | 15 | 5.1 | 18 | 4 | 14 | 5 | 1.0 | 3 |
attributionSrc |
125 | 125 | No | 111 | No | 125 | No | 83 | No | 27.0 | 125 |
blocking |
105 | 105 | No | 91 | 18.2 | 105 | No | 72 | 18.2 | 20.0 | 105 |
charset |
1 | 12 | 1 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
crossOrigin |
19 | 14 | 14 | 15 | 6 | 25 | 14 | 14 | 6 | 1.5 | 4.4 |
defer |
1 | 12 | 3.5 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
event |
1 | 12 | 1 | 15 | 3 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
fetchPriority |
102101–102 | 102101–102 | 132 | 8887–88 | 17.2 | 102101–102 | 132 | 70 | 17.2 | 19.0 | 102101–102 |
htmlFor |
1 | 12 | 1 | 15 | 3 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
integrity |
45 | 17 | 43 | 32 | 11.1 | 45 | 43 | 32 | 11.3 | 5.0 | 43 |
noModule |
61 | 16 | 60 | 48 | 11 | 61 | 60 | 45 | 11 | 8.0 | 61 |
referrerPolicy |
70 | 79 | 65 | 57 | 14 | 70 | 65 | 49 | 14 | 10.0 | 70 |
src |
1 | 12 | 1 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
supports_static |
96 | 96 | 94 | 82 | 16 | 96 | 94 | 67 | 16 | 17.0 | 96 |
text |
1 | 12 | 1 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
type |
1 | 12 | 1 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
См. также
- HTML
<script>элемент - HTML
<noscript>элемент document.currentScript- Web Workers (фрагменты кода, похожие на скрипты, но выполняемые в другом глобальном контексте)
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement