--- title: HTMLScriptElement slug: Web/API/HTMLScriptElement translation_of: Web/API/HTMLScriptElement ---
{{APIRef("HTML DOM")}}

HTML-элементы {{HTMLElement("script")}} предоставляют HTMLScriptElement интерфейс, который предоставляет специальные свойства и методы для манипулирования поведением и выполнением <script> элементов (за пределами унаследованного {{domxref("HTMLElement")}} интерфейса).

JavaScript файлы должны обслуживаться с  application/javascript MIME type, но браузеры снисходительны и блокируют их только, если скрипты обслуживаются с типом изображение (image/*), типом видео (video/*), типом аудио (audio/*), или text/csv. Если скрипт заблокирован, его элемент получает событие {{event("error")}}; в противном случае, он получает событие {{event("success")}}.

{{InheritanceDiagram(600, 120)}}

Свойства

Наследует свойства от своего родителя, {{domxref("HTMLElement")}}.

Имя Тип Описание
type {{domxref("DOMString")}} Представляет тип MIME сценария. Он отражает атрибут {{htmlattrxref("type","script")}}.
src {{domxref("DOMString")}} Получает и отдаёт URL внешнего скрипта. Он отражает атрибут {{htmlattrxref("src","script")}}.
event{{obsolete_inline}} {{domxref("DOMString")}} Старый, способ регистрации обработчиков событий на элементы в HTML-документе.
charset {{domxref("DOMString")}} Представляет кодировку символов внешнего скрипта. Он отражает атрибут {{htmlattrxref("charset","script")}}.
async {{domxref("Boolean")}}

Атрибуты async и defer булевы атрибуты, которые контролируют как скрипт должен выполняться. Атрибуты defer и async не должны быть указаны, если атрибут src отсутствует.

Существует три возможных режима выполнения:

  1. Если атрибут async представлен, то скрипт будет выполняться асинхронно по мере загрузки.
  2. Если атрибут async отсутствует, но представлен атрибут defer, то скрипт будет выполняться когда страница полностью загружена.
  3. Если ни один атрибут не представлен, то скрипт извлекается и выполняется незамедлительно, блокируя дальнейший парсинг страницы.

Атрибут defer может быть указан с атрибутом async, тогда устаревшие браузеры, которые поддерживают только defer (но не async) откатятся к поведению defer взамен дефолтного поведения блокировки.

Примечание: Точные детали обработки для этих атрибутов комплексны, включая множество различных аспектов HTML, и разбросаны по всей спецификации. Эти алгоритмы описывают основную идею, но они основаны на правилах синтаксического анализа для {{HTMLElement("script")}} открывающих и закрывающих тэгах в HTML, во внешнем контенте, и в XML; правиле для метода  document.write(); обработке сценариев; и так далее.
defer {{domxref("Boolean")}}
crossOrigin {{experimental_inline}} {{domxref("DOMString")}} {{domxref("DOMString")}}, отражающий настройку CORS для элементов скрипта. Для скриптов из других источников, он контролирует, будет ли раскрыта информация об ошибке.
text {{domxref("DOMString")}}

IDL атрибут text объединяет и возвращает содержимое всех Text нод внутри элемента {{HTMLElement("script")}} (игнорируя другие ноды, такие как комментарии) в древовидном порядке. При установке, он  действует также, как и IDL атрибут textContent.

Примечание: При вставке с использованием метода document.write(), элементы {{HTMLElement("script")}} выполняются (обычно синхронно), когда при вставке используются innerHTML или outerHTML, они вообще не выполняются.
noModule {{domxref("Boolean")}} Это булево свойство выполняет остановку выполнения скрипта в браузере, поддерживающим ES2015 модули — используется для запуска резервных скриптов, которые не поддерживают JavaScript модули.
referrerPolicy {{domxref("DOMString")}} {{domxref("DOMString")}}, который отражает HTML атрибут {{htmlattrxref("referrerPolicy", "script")}} указывающий, какой реферер использовать при извлечении скриптов и выборках, выполненных сценариев.

Методы

Нет специальных методов; наследует методы от родителей, {{domxref("HTMLElement")}}.

Примеры

Динамическое импортирование скриптов

Давайте создадим функцию. которая импортирует новый скрипт в документ, создавая ноду {{HTMLElement("script")}} непосредственно перед {{HTMLElement("script")}}, в котором размещается следующий код (через {{domxref("document.currentScript")}}). Эти скрипты будут выполняться асинхронно. Для получения подробной информации смотрите свойства defer и async.

function loadError(oError) {
  throw new URIError("The script " + oError.target.src + " didn't load correctly.");
}

function prefixScript(url, onloadFunction) {
  var newScript = document.createElement("script");
  newScript.onerror = loadError;
  if (onloadFunction) { newScript.onload = onloadFunction; }
  document.currentScript.parentNode.insertBefore(newScript, document.currentScript);
  newScript.src = url;
}

Следующая функция, вместо добавления новых скриптов непосредственно перед элементом {{domxref("document.currentScript")}}, добавляет их как потомков тега {{HTMLElement("head")}}.

function loadError(oError) {
  throw new URIError("The script " + oError.target.src + " didn't load correctly.");
}

function affixScriptToHead(url, onloadFunction) {
  var 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", function () { alert("The script \"myScript2.js\" has been correctly loaded."); });

Спецификации

Спецификация Статус Комментарий
{{SpecName('HTML WHATWG', "#htmlscriptelement", "HTMLScriptElement")}} {{Spec2('HTML WHATWG')}}
{{SpecName('HTML5.1', "scripting-1.html#the-script-element", "HTMLScriptElement")}} {{Spec2('HTML5.1')}}
{{SpecName('HTML5 W3C', "scripting-1.html#the-script-element", "HTMLScriptElement")}} {{Spec2('HTML5 W3C')}} Следующие свойства устарели: htmlFor,.
{{SpecName('DOM2 HTML', 'html.html#ID-81598695', 'HTMLScriptElement')}} {{Spec2('DOM2 HTML')}} Нет изменений в сравнении с {{SpecName("DOM1")}}.
{{SpecName('DOM1', 'level-one-html.html#ID-81598695', 'HTMLScriptElement')}} {{Spec2('DOM1')}} Первое определение.

Поддержка браузерами

{{Compat("api.HTMLScriptElement")}}

Смотрите также