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

Спецификация HTML5 (которая на момент написания этих строк еще находилась в состоянии проекта) и ряд связанных с ней спецификаций определяют ряд других важных прикладных интерфейсов для веб-приложений. В их число входят прикладные интерфейсы для сохранения данных и рисования графики, которые описываются в главах 21 и 20, а также множество других возможностей, таких как геопозиционирование (geolocation), управление журналами посещений и фоновые потоки выполнения. Когда все эти прикладные интерфейсы будут реализованы, они обеспечат дальнейшее расширение возможностей веб-приложений. Подробнее о них рассказывается в главе 22.

Безусловно, сценарии на языке JavaScript занимают в веб-приложениях более важное положение, чем в веб-документах. Сценарии на JavaScript расширяют возможности веб-документов, но при правильном оформлении документы остаются полностью доступными даже при отключенной поддержке JavaScript. Вебприложения по определению являются программами на языке JavaScript, использующими механизмы, предоставляемые веб-броузерами, и не будут работать при отключенной поддержке JavaScript. [28]

13.2. Встраивание JavaScript-кода в разметку HTML

Клиентский JavaScript-код может встраиваться в HTML-документы четырьмя способами:

• встроенные сценарии между парой тегов

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

• из внешнего файла, заданного атрибутом

<b>src</b>
тега
<b>&lt;script&gt;;</b>

• в обработчик события, заданный в качестве значения HTML-атрибута, такого

как

<b>onclick</b>
или
<b>onmouseover;</b>
• как тело URL-адреса, использующего специальный спецификатор псевдопротокола JavaScript:.

В следующих далее подразделах описываются все четыре способа встраивания программного кода на языке JavaScript. Следует отметить, что HTML-атрибуты обработчиков событий и адреса URL с псевдопротоколом javascript: редко используются в современной практике программирования на языке JavaScript (они были более распространены на раннем этапе развития Всемирной паутины). Встроенные сценарии (в тегах

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

13.2.1. Элемент <script>

Клиентские JavaScript-сценарии могут встраиваться в HTML-файлы между тегами

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

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

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

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

В языке разметки XHTML содержимое тега

<b>&lt;script&gt;</b>
обрабатывается наравне с содержимым любого другого тега. Если JavaScript-код содержит символы
<b>&lt;</b>
или
<b>&amp;</b>
, они интерпретируются как элементы XML-разметки. Поэтому в случае применения языка XHTML лучше помещать весь JavaScript-код внутрь секции CDATA:

<b>&lt;script&gt;&lt;![CDATA[</b>

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

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

В примере 13.2 демонстрируется содержимое HTML-файла, включающего простую программу на языке JavaScript. Действия программы описываются в комментариях, тем не менее замечу, что главная цель этого примера в том, чтобы продемонстрировать, как JavaScript-код встраивается в файлы HTML наряду со всем остальным, в данном случае - со стилями

<b>CSS</b>
. Обратите внимание, что этот пример по своей структуре напоминает пример 13.1 и точно так же использует обработчик события
<b>onload</b>
.

Пример 13.2. Простые часы с цифровым табло на JavaScript

<b>&lt;! DOCTYPE html&gt; &lt;!-- Это файл HTML5 --&gt; </b>

<b>&lt;html&gt; &lt;!-- Корневой элемент --&gt; </b>

<b>&lt;head&gt; &lt;!-- Заголовок, здесь располагаются сценарии и стили --&gt; </b>

<b>  &lt;title&gt;Digital Clock&lt;/title&gt; </b>

<b>  &lt;script&gt; // Сценарий на JavaScript </b>

<b>    // Определение функции для отображения текущего времени</b>

<b>    function displayTime() {</b>

<b>      var elt = document.getElementById(&quot;clock&quot;); // Найти элемент c id=&quot;clock&quot;</b>

<b>      var now = new Date(); // Получить текущее время</b>

<b>      elt.innerHTML = now.toLocaleTimeString(); // Отобразить его</b>

<b>      setTimeout(displayTime, 1000); // Вызвать снова через 1 сек.</b>

<b>    }</b>

<b>    window.onload = displayTime; // Начать отображение времени после загрузки документа. </b>

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

<b>  &lt;style&gt; /* Таблица стилей CSS для часов */</b>

<b>    #clock { /* Стили применяются к элементу с id=&quot;clock&quot; */</b>

<b>      font: bold 24pt sans; /* Использовать большой полужирный шрифт */</b>

<b>      background: #ddf; /* Светлый, голубовато-серый фон */</b>

<b>      padding: 10px; /* Отступы вокруг */</b>

<b>      border: solid black 2рх; /* И сплошная черная рамка */</b>