Клиентский JavaScript_код может встраиваться в HTML_документы нескольки_ ми способами:
• между парой тегов <script> и </script>;
• из внешнего файла, заданного атрибутом src тега <script>;
• в обработчик события, заданный в качестве значения HTML_атрибута, такого как onclick или onmouseover;
• как тело URL_адреса, использующего специальный спецификатор псевдо_ протокола javascript:.
В этом разделе описываются теги <script>. Порядок встраивания JavaScript_ко_ да в обработчики событий и URL описан в этой главе позже.
13.2.1. Тег <script>
Клиентские JavaScript_сценарии представляют собой часть HTML_файла и нахо_ дятся между тегами <script> и </script>:
<script>
// Здесь располагается JavaScript_код
</script>
В языке разметки XHTML содержимое тега <script> обрабатывается наравне с со_ держимым любого другого тега. Если JavaScript_код содержит символы < или &, они интерпретируются как элементы XML_разметки. Поэтому в случае примене_ ния языка XHTML лучше помещать весь JavaScript_код внутрь секции CDATA:
<script><![CDATA[// Здесь располагается JavaScript_код
]]></script>
Единственный HTML_документ может содержать произвольное число элементов <script>. При наличии нескольких отдельных сценариев, они будут запускаться
в порядке их следования в документе (исключение составляет атрибут defer, опи_ санный в разделе 13.2.4). Хотя отдельные сценарии в одном файле исполняются
в различные моменты времени, в процессе загрузки и анализа HTML_файла они представляют собой части одной JavaScript_программы: функции и переменные, определенные в одном сценарии, доступны всем сценариям, находящимся в том же файле. Например, в HTML_странице может быть следующий сценарий:
Ниже на той же HTML_странице вы можете вызывать функцию square(), причем даже в другом блоке сценария. Контекстом является HTML_страница, а не блок сценария:1
1 Здесь функция alert() используется просто для отображения информации: она преобразует свой аргумент в строку и выводит ее в диалоговом окне. Подробнее метод alert() описывается в разделе 14.5. В примере 15.9 приводится альтернати_ ва функции alert(), не создающая всплывающих диалоговых окон, для закрытия которых требуется выполнить щелчок.
13.2. Встраивание JavaScript*кода в HTML*документы
<script>alert(square(2));</script>
В примере 13.1 показан HTML_файл, включающий простую JavaScript_програм_ му. Обратите внимание на различие между этим примером и многими фрагмен_ тами кода, показанными в этой книге ранее: пример интегрирован в HTML_файл и имеется понятный контекст, в котором он работает. Обратите также внимание на атрибут language в теге <script>. Его описание приводится в разделе 13.2.3.
Пример 13.1. Простая JavaScript'программа в HTML'файле
// Определяем функцию для дальнейшего использования function print_todays_date() {
var d = new Date(); // Получаем текущие дату и время document.write(d.toLocaleString()); // Вставляем это в документ
}
</script>
</head>
<body>
Дата и время:<br>
<script language="JavaScript">
// Теперь вызываем определенную ранее функцию print_todays_date();
</script>
</body>
</html>
Пример 13.1 помимо всего прочего демонстрирует использование функции docu_ ment.write(). В клиентском JavaScript эта функция может применяться для вы_ вода HTML_текста в той точке документа, в которой располагается сценарий (бо_ лее подробно об этом методе рассказывается в главе 15). Обратите внимание: спо_ собность сценариев генерировать текст для вставки в HTML_документ означает, что синтаксический анализатор HTML_кода должен интерпретировать Java_ Script_сценарии как часть общего процесса синтаксического разбора документа. Невозможно просто взять и объединить все сценарии в документе и запустить по_ лучившийся результат как один большой сценарий уже после окончания разбора документа, потому что любой сценарий, находящийся в документе, может изме_ нить этот документ (обсуждение атрибута defer приводится в разделе 13.2.4).