JavaScript. Подробное руководство, 6-е издание, стр. 173

<b>&lt;script language=&quot;javascript&quot;&gt;</b>

<b>// Здесь располагается JavaScript-код...</b>

<b>&lt;/script&gt;</b>

Атрибут

<b>language</b>
считается устаревшим и не должен более использоваться.

Когда веб-броузер встречает элемент

<b>&lt;script&gt;</b>
с атрибутом
<b>type</b>
, значение которого он не может распознать, он пытается проанализировать элемент, но не отображает и не выполняет его содержимое. Это означает, что элемент
<b>&lt;script&gt;</b>
можно использовать для встраивания в документ произвольных текстовых данных: достаточно просто указать значение атрибута
<b>type</b>
, указывающее, что данные не являются выполняемым программным кодом. Чтобы извлечь эти данные, можно воспользоваться свойством
<b>text</b>
объекта
<b>HTMLElement</b>
, представляющего элемент
<b>script</b>
(как получить эти элементы, описывается в главе 15). Однако важно отметить, что такой прием встраивания данных работает только при непосредственном встраивании их в разметку. Если указать атрибут
<b>src</b>
и неизвестное значение в атрибуте
<b>type</b>
, броузер проигнорирует этот тег и ничего не будет загружать с указанного адреса URL.

13.2.4. Обработчики событий в HTML

JavaScript-код, расположенный в теге

<b>&lt;script&gt;,</b>
исполняется один раз, когда содержащий его HTML-файл считывается в веб-броузер. Для обеспечения интерактивности программы на языке JavaScript должны определять обработчики событий - JavaScript-функции, которые регистрируются в веб-броузере и автоматически вызываются веб-броузером в ответ на определенные события (такие как ввод данных пользователем). Как было показано в начале этой главы, JavaScript-код может регистрировать обработчики событий, присваивая функции свойствам объектов
<b>Element</b>
(таким как
<b>onclick</b>
или
<b>onmouseover</b>
), представляющих HTML-элементы в документе. (Существует и другой способ регистрации обработчиков событий - подробности приводятся в главе 17.)

Свойства обработчиков событий, такие как

<b>onclick</b>
, отражают HTML-атрибуты с теми же именами, что позволяет определять обработчики событий, помещая JavaScript-код в HTML-атрибуты. Например, чтобы определить обработчик события, который вызывается, когда пользователь щелкает на флажке в форме, код обработчика указывается в качестве значения атрибута
<b>onchange</b>
HTML-элемента, определяющего флажок:

<b>&lt;input type=&quot;checkbox&quot; name=&quot;options&quot; value=&quot;giftwrap&quot;</b>

<b>onchange=&quot;order.options.giftwrap = this.checked;&quot;&gt;</b>

Обратите внимание на атрибут

<b>onchange</b>
. JavaScript-код, являющийся значением этого атрибута, будет выполняться всякий раз, когда пользователь будет щелкать на флажке.

Атрибуты обработчиков событий, включенных в разметку HTML, могут содержать одну или несколько JavaScript-инструкций, отделяемых друг от друга точками с запятой. Эти инструкции будут преобразованы интерпретатором в тело функции, которая в свою очередь станет значением соответствующего свойства обработчика события. (Подробное описание, как выполняется преобразование текстового содержимого HTML-атрибутов в функции на языке JavaScript, приводится в разделе 17.2.2.) Однако обычно в HTML-атрибуты обработчиков событий включаются простые инструкции присваивания, как в примере выше, или простые вызовы функций, объявленных где-то в другом месте. Это позволяет держать большую часть JavaScript-кода внутри сценариев и ограничивает степень взаимопроникновения JavaScript- и HTML-кода. На практике многие веб-разработчики считают плохим стилем использование HTML-атрибутов обработчиков событий и предпочитают отделять содержимое от поведения.

13.2.5. JavaScript в URL

Еще один способ выполнения JavaScript-кода на стороне клиента - включение этого кода в URL-адресе вслед за спецификатором псевдопротокола

<b>javascript:</b>
. Этот специальный тип протокола обозначает, что тело URL-адреса представляет собою произвольный JavaScript-код, который должен быть выполнен интерпретатором JavaScript. Он интерпретируется как единственная строка, и потому инструкции в ней должны быть отделены друг от друга точками с запятой, а для комментариев следует использовать комбинации символов /* */, а не //. «Ресурсом», который определяется URL-адресом
<b>javascript:</b>
, является значение, возвращаемое этим программным кодом, преобразованное в строку. Если программный код возвращает значение
<b>undefined</b>
, считается, что ресурс не имеет содержимого.

URL вида

<b>javascгipt:</b>
можно использовать везде, где допускается указывать обычные URL: в атрибуте
<b>href</b>
тега
<b>&lt;а&gt;,</b>
в атрибуте
<b>action</b>
тега
<b>&lt;form&gt;</b>
и даже как аргумент метода, такого как
<b>window.ореп().</b>
Например, адрес URL с программным кодом на языке JavaScript в гиперссылке может иметь такой вид:

<b>&lt;a href=&quot;JavaScript:new Date().toLocaleTimeString();&quot;&gt;</b>

<b>Который сейчас час?</b>

<b>&lt;/a&gt;</b>

Некоторые броузеры (такие как Firefox) выполняют программный код в URL и используют возвращаемое значение в качестве содержимого нового отображаемого документа. Точно так же, как при переходе по ссылке http:, броузер стирает текущий документ и отображает новое содержимое. Значение, возвращаемое примером выше, не содержит HTML-теги, но если бы они имелись, броузер мог бы отобразить их точно так же, как любой другой HTML-документ, загруженный в броузер. Другие броузеры (такие как Chrome и Safari) не позволяют URL-адресам, как в примере выше, затирать содержимое документа - они просто игнорируют возвращаемое значение. Однако они поддерживают URL-адреса вида:

<b>&lt;a href=&quot;JavaScript: alert (new Date().toLocaleTimeString()); &quot;&gt;</b>