Глава 1.9. Сценарии

1.9.1. Общее описание

Сценарий клиента — это программа, которая вызывается из HTML-документа или непосредственно в него вложена и исполняется на компьютере-клиенте. Сценарии позволяют авторам дополнить их HTML-документы динамически изменяемыми свойствами и интерактивными возможностями, а именно:

  • Сценарии могут исполняться при загрузке документа и динамически изменять его содержимое.
  • Сценарии могут вызываться для реакции на такие события, как загрузка или выгрузка документа, движение мыши, нажатие клавиши и т. п.
  • Сценарии могут использоваться для обработки данных, вводимых пользователем в элементы формы. В частности, они позволяют заполнять поля формы на основе содержимого других полей или контролировать правильность введенных данных.
  • Сценарии могут присоединяться к элементам форм (например, кнопкам) для создания графического пользовательского интерфейса.

Существуют два типа сценариев, которые могут быть присоединены к HTML-документу:

  • Сценарии, которые исполняются в процессе загрузки документа обозревателем. Эти сценарии помещаются в элемент SCRIPT. Для обозревателей, не поддерживающих сценарии, может быть задано альтернативное содержание элементом NOSCRIPT.
  • Сценарии, которые вызываются каждый раз, когда происходит определенное событие. Эти сценарии связываются с соответствующими элементами через атрибуты обработки событий. Подробно обработка событий описана в гл. 4.11.

1.9.2. Определение сценария: элемент SCRIPT

Синтаксис: <SCRIPT>…</SCRIPT>
Атрибуты:  type = тип файла (тип MIME языка сценария)
           charset = кодировка (кодировка символов)
           src = URI (URI внешнего сценария)
           defer = defer (только декларация)
Поддержка: Internet Explorer Атрибут charset игнорируется (5.0+)
           Netscape Navigator Атрибуты charset и defer игнорируются (4.0+)

Элемент SCRIPT определяет сценарий клиента. Он может содержаться в элементе HEAD, а также в любых текстовых и блочных элементах тела документа. Его содержимым должен быть сценарий на языке программирования, заданном обязательным атрибутом type согласно приведенной ниже таблице 1.7.

На практике атрибут type используется редко, т. к. обозреватели Microscape поддерживают более удобный нестандартный атрибут language, имеющий то же самое назначение, но более удобный синтаксис:

Таблица 1.7. Языки программирования сценариев
Язык программирования type language
JavaScript (JScript) "text/javascript" "javascript"
PerlScript "text/perlscript" "perlscript"
TCL "text/tcl" "tcl"
VBScript "text/vbscript" "vbscript"

Атрибут type может быть опущен, если документ содержит метаописатель, задающий язык программирования сценариев, принятый по умолчанию, например <META http-equiv="Content-Script-Type" content="text/javascript">.

Сценарии подразделяются на вложенные и внешние. Вложенный сценарий размещается непосредственно внутри элемента SCRIPT; в этом случае атрибуты src и charset должны отсутствовать. Пример внутреннего сценария:

<SCRIPT type="text/javascript">
  document.write("<p><b>Hello World!<\/b>")
</SCRIPT>

Внешний сценарий хранится в отдельном файле; в этом случае атрибут src должен содержать URI этого файла, а атрибут charset может использоваться для задания его кодировки символов (обычно это "ISO-8859-1"). Обратите внимание, что в случае вложенного сценария атрибут charset игнорируется. Пример внешнего сценария:

<SCRIPT type="text/javascript" src="global/hello.js"></SCRIPT>

Необязательный атрибут defer указывает, что обозреватель может отложить обработку данного сценария до завершения загрузки и отображения документа. Такой сценарий не должен модифицировать содержимое документа и не должен содержать обработчиков событий, которые могут произойти в процессе загрузки документа.

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

<SCRIPT type="text/javascript">
  <!-- начало сценария
    document.write("<p><b>Hello, World!<\/b>");
  // конец сценария -->
</SCRIPT>

Обратите внимание, что "-->" содержится в однострочном комменарии языка JavaScript, начинающемся с "//". Примеры таких комментариев для других языков программирования будут приведены ниже.

1.9.3. Альтернативное содержание: элемент NOSCRIPT

Синтаксис: <NOSCRIPT>…</NOSCRIPT> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка: Internet Explorer Все атрибуты игнорируются (5.0+)
           Netscape Navigator Все атрибуты игнорируются (4.0+)

Элемент NOSCRIPT определяет альтернативное содержание на тот случай, когда обозреватель не может исполнить ранее приведенный сценарий. Точнее говоря, его содержимое должно отображаться только в следующих случаях:

  • если исполнение сценариев отключено пользователем;
  • если обозреватель не поддерживает язык программирования, на котором написан сценарий, предшествующий данному элементу.

Элемент NOSCRIPT может содержать любые блочные элементы. Он может содержаться в элементах BLOCKQUOTE, BODY, BUTTON, DD, DEL, DIV, FIELDSET, FORM, INS, LI, MAP, NOSCRIPT, OBJECT, TD и TH. Вообще говоря, полезность данного элемента невелика, так как сценарии обычно используются для динамического изменения Веб-страницы, которое невозможно достичь статическими средствами. Пример:

<SCRIPT type="text/vbscript">
 …сценарий на языке VBScript, вставляющий данные в документ…
</SCRIPT>
<NOSCRIPT>
 <P>Доступ к <A href="http://someplace.com/data">данным.</A></P>
</NOSCRIPT>

1.9.4. Языки программирования сценариев

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

WDH+ О том, как определить имена и версии установленных в системе языков, см. WDH+: Версии сценарных языков.

JavaScript (JScript)

JavaScript был разработан Бренданом Эйком (Brendan Eich) в Netscape Communications как язык сценариев для обозревателей Netscape Navigator, начиная с версии 2.0. В дальнейшем к развитию этого языка подключилась корпорация Microsoft, чьи обозреватели Internet Explorer поддерживают JavaScript, начиная с версии 3.0. Версия Microsoft получила название JScipt, поскольку JavaScript является зарегистрированной маркой фирмы Netscape. JavaScript — это единственный язык сценариев, поддержка которого встроена в наиболее популярные обозреватели, что делает его стандартом de facto для программирования сценариев. Подробное описание JavaScript приведено в Части III.

Пример сценария:

<SCRIPT type="text/javascript">
<!-- начало сценария
  document.write("Hello, world!");
// конец сценария -->
</SCRIPT>

PerlScript

Сценарная версия языка PERL, работающая на стороне клиента под управлением Microsoft Internet Explorer 4.0+ и на стороне сервера под управлением Microsoft Internet Information Server 3.0+. Для его использования в Веб-страницах необходимо установить PerlScript на каждом компьютере-клиенте, поэтому он может применяться только в интрасетях. Рекомендуется использовать PerlScript в тех случаях, когда Вам необходима интенсивная обработка символьных выражений. Его последнюю версию можно бесплатно загрузить с узла http://www.activestate.com/ActivePerl/ Внешняя ссылка.

Пример сценария:

<SCRIPT type="text/perlscript">
<!-- начало сценария
  $window->document->write('Hello, world!');
# конец сценария -->
</SCRIPT>

TCL (Tool Command Language)

TCL был разработан Джоном Аустерхаутом (John Ousterhout) в конце 80-х. Часто упоминается как TCL/TK, поскольку обычно используется совместно с пакетом создания пользовательских интерфейсов TK. Для его использования в Веб-страницах необходимо установить TCL на каждом компьютере-клиенте, поэтому он может применяться только в интрасетях. Рекомендуется использовать TCL в тех случаях, когда Вам необходимо построение сложных графических пользовательских интерфейсов. Его последнюю версию можно бесплатно загрузить с узла http://dev.scriptics.com/ Внешняя ссылка.

<SCRIPT type="text/tcl">
<!-- начало сценария
  document write("Hello, world!")
# конец сценария -->
</SCRIPT>

VBScript

Сценарная версия языка Microsoft Visual Basic. Поддерживается только обозревателем Microsoft Internet Explorer и большинством разработчиков воспринимается как порождение ностальгии Билла Гейтса по программистской юности.

Пример сценария:

<SCRIPT type="text/vbscript">
<!-- начало сценария
  Document.Write "Hello, World!"
' конец сценария -->
</SCRIPT>