ИНФОРМАЦИЯ,    ДИЗАЙН,    ПЕРЕВОДЫ,    РЕКЛАМА   .   .   .
w a p - с а й т
Информационный портал
Сегодня:  
admin@aranea.ru
+79068922256

  aranea.ru || Спецификация HTML 4.01 | 18. Сценарии (Scripts)

18. Сценарии (Scripts)

18.2. Разработка документов для устройств вывода, которые поддерживают сценарии

18.2.1. Элемент SCRIPT
18.2.2. Определение языка сценария
   Язык сценариев по умолчанию
   Локальное объявление языка сценариев
   Ссылки на элементы HTML из сценария
18.2.3. Встроенные события
18.2.4. Динамическая модификация документов

Следующие разделы обсуждают вопросы, которые касаются устройств вывода, поддерживающих сценарии.

18.2.1 Элемент SCRIPT

<!ELEMENT SCRIPT - - %Script;          -- script statements -->
<!ATTLIST SCRIPT
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  type        %ContentType;  #REQUIRED -- content type of script language --
  src         %URI;          #IMPLIED  -- URI for an external script --
  defer       (defer)        #IMPLIED  -- UA may defer execution of script --
  >

Начальный тег: обязательный, конечный тег: обязательный

Определение атрибутов

src = uri [CT]
Этот атрибут определяет место размещения внешнего сценария.
type = content-type [CI]
Этот атрибут определяет язык сценариев содержания элемента или преодолевает язык сценариев по умолчанию. Язык сценариев определяется как тип содержания (например, "text/javascript"). Авторы должны предоставлять значение для этого атрибута. Значения по умолчанию для этого атрибута нет.
language = cdata [CI]
Устаревает (Deprecated). Этот атрибут определяет язык сценариев содержания элемента. Его значение является идентификатором для языка, но так как эти идентификаторы не являются стандартными, то этот атрибут является устаревающим (deprecated) в пользу type.
defer [CI]
Когда установлен этот булевый атрибут, то он предоставляет сообщение устройству вывода, что сценарий не будет генерировать какое-то содержание документа (например, в javascript не выполняется "document.write") и таким образом, устройство вывода может продолжить синтаксический анализ и визуализацию.

Атрибуты, определенные в другом месте

  • charset

Элемент SCRIPT помещает сценарий (script) внутрь документа. Этот элемент может появляться любое количество раз в элементах HEAD или BODY HTML-документа.

Сценарий может быть определен внутри содержания элемента SCRIPT или во внешнем файле. Если атрибут src не установлен, то устройства вывода должны интерпретировать содержание элемента как сценарий. Если src имеет значение URI, то устройства вывода должны игнорировать содержание элемента и извлекать сценарий по адресу URI. Обратите внимание, что атрибут charset ссылается на кодировку символов сценария, определенного атрибутом src; это не касается содержания элемента SCRIPT.

Сценарии оцениваются машиной сценариев (script engine), которая должна быть известна устройству вывода.

Синтаксис данных сценария зависит от языка программирования.

18.2.2 Определение языка сценария

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

Язык сценариев по умолчанию

Авторам следует определять язык сценариев по умолчанию для всех сценариев в документе, включая следующее объявление META в элемент HEAD:

<META http-equiv="Content-Script-Type" content="type">

где "type" является типом содержания, называющего язык сценариев. Примеры значений включают: "text/tcl", "text/javascript", "text/vbscript".

При отсутствии объявления META, по умолчанию может установиться HTTP заголовком "Content-Script-Type".

    Content-Script-Type: type

где "type" опять является типом содержания, называющего язык сценариев.

Устройства вывода должны определять язык сценариев по умолчанию для документа в соответствии со следующими шагами (от высшего приоритета к низшему):

  1. Если объявления META определяют "Content-Script-Type", то последнее в потоке символов определяет язык сценариев по умолчанию.
  2. Иначе, если заголовки HTTP определяет "Content-Script-Type", то последнее в потоке символов определяет язык сценариев по умолчанию.

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

Локальное объявление языка сценариев

Атрибут type должен определяться для каждого случая элемента SCRIPT в документе. Значение атрибута type для элемента SCRIPT преодолевает язык сценария по умолчанию для такого элемента.

В следующем примере, мы объявляем язык сценария по умолчанию "text/tcl". Мы включаем один элемент SCRIPT в заголовок, чей сценарий размещен во внешнем файле, и является языком сценария "text/vbscript". Мы также включаем один элемент SCRIPT в тело, который содержит свой собственный сценарий, написанный языком "text/javascript".

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>A document with SCRIPT</TITLE>
<META http-equiv="Content-Script-Type" content="text/tcl">
<SCRIPT type="text/vbscript" src="http://someplace.com/progs/vbcalc">
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT type="text/javascript">
...some JavaScript...
</SCRIPT>
</BODY>
</HTML>

Ссылки на элементы HTML из сценария

Каждый язык сценария имеет свои собственные соглашения для обращения к объектам HTML из сценария. Эта спецификация не определяет стандартный механизм для обращения к объектам HTML.

Но, сценарии должны обращаться к элементу в соответствии с его присвоенным именем. Машины сценариев должны следовать правилам преимущества, когда идентифицируют элемент: атрибут name имеет преимущество над id, если установлены оба. Иначе, может использоваться тот или другой.

18.2.3 Встроенные события

Обратите внимание. Авторам HTML-документов советуют, чтобы изменения по возможности происходили в области встроенных событий (например, как сценарии связаны с событиями). Исследования в этой области выполняются членами рабочей группы W3C Document Object Model Working Group (смотрите сайт W3C по адресу http://www.w3.org/ для получения подробной информации).

Определение атрибутов

onload = script [CT]
Событие onload происходит, когда устройство вывода заканчивает загрузку окна или всех фреймов внутри FRAMESET. Этот атрибут может использоваться с элементами BODY и FRAMESET.
onunload = script [CT]
Событие onunload происходит, когда устройство вывода выгружает документ из окна или фрейма. Этот атрибут может использоваться с элементами BODY и FRAMESET.
onclick = script [CT]
Событие onclick происходит, когда кнопка координатно-указательного устройства нажимается над элементом. Этот атрибут может использоваться с большинством элементов.
ondblclick = script [CT]
Событие ondblclick происходит, когда кнопка координатно-указательного устройства нажимается дважды над элементом. Этот атрибут может использоваться с большинством элементов.
onmousedown = script [CT]
Событие onmousedown происходит, когда кнопка координатно-указательного устройства нажимается над элементом. Этот атрибут может использоваться с большинством элементов.
onmouseup = script [CT]
Событие onmouseup происходит, когда кнопка координатно-указательного устройства отпускается над элементом. Этот атрибут может использоваться с большинством элементов.
onmouseover = script [CT]
Событие onmouseover происходит, когда координатно-указательное устройство наезжает на элемент. Этот атрибут может использоваться с большинством элементов.
onmousemove = script [CT]
Событие onmousemove происходит, когда координатно-указательное устройство перемещается в момент нахождения его над элементом. Этот атрибут может использоваться с большинством элементов.
onmouseout = script [CT]
Событие onmouseout происходит, когда координатно-указательное устройство убирается с элемента. Этот атрибут может использоваться с большинством элементов.
onfocus = script [CT]
Событие onfocus происходит, когда элемент получает фокус либо координатно-указательным устройством, либо навигацией с помощью табуляции. Этот атрибут используется со следующими элементами: A, AREA, LABEL, INPUT, SELECT, TEXTAREA и BUTTON.
onblur = script [CT]
Событие onblur происходит, когда элемент теряет фокус либо координатно-указательного устройства, либо навигацией с помощью табуляции. Оно может использоваться с теми же элементами, что и onfocus.
onkeypress = script [CT]
Событие onkeypress происходит, когда клавиша нажата и отжата над элементом. Этот атрибут может использоваться с большинством элементов.
onkeydown = script [CT]
Событие onkeydown происходит, когда клавиша нажата над элементом. Этот атрибут используется с большинством элементов.
onkeyup = script [CT]
Событие onkeyup происходит, когда клавиша освобождается над элементом. Этот атрибут используется с большинством элементов.
onsubmit = script [CT]
Событие onsubmit происходит, когда предоставляется форма. Он употребляется только с элементом FORM.
onreset = script [CT]
Событие onreset происходит, когда форма возвращается в исходное состояние. Он употребляется только с элементом FORM.
onselect = script [CT]
Событие onselect происходит, когда пользователь выбирает текст в текстовом поле. Этот атрибут может использоваться с элементами INPUT и TEXTAREA.
onchange = script [CT]
Событие onchange происходит, когда управление теряет фокус на вводе, и его значение было изменено после получения фокуса. Этот атрибут применяется для следующих элементов: INPUT, SELECT и TEXTAREA.

Можно связать действие с определенным количеством событий, которые происходят, когда пользователь взаимодействует с устройством вывода. Каждое из "внутренних событий" ("intrinsic events"), указанных выше, принимает значение, которое является сценарием. Сценарий выполняется тогда, когда событие происходит для данного элемента. Синтаксис данных сценария зависит от языка программирования.

Элементы управления, такие как INPUT, SELECT, BUTTON, TEXTAREA и LABEL, все отвечают на определенные внутренние события. Когда эти элементы не появляются внутри формы, то они могут использоваться для добавления графического интерфейса пользователя для документа.

Например, авторы могут захотеть включить кнопки в свои документы, которые не предоставляют формы, но все же связываются с сервером, когда они активированы.

Следующие примеры показывают возможное управление и поведение интерфейса пользователя, основанное на внутренних событиях.

В следующем примере, userName требует текстового поля. Когда пользователь пытается покинуть поле, событие onblur вызывает функцию JavaScript для подтверждения того, что userName имеет доступное значение.

<INPUT NAME="userName" onblur="validUserName(this.value)">

Ниже приведен другой пример JavaScript:

<INPUT NAME="num"
    onchange="if (!checkNum(this.value, 1, 10)) 
        {this.focus();this.select();} else {thanks()}"
    VALUE="0">

Ниже следует пример VBScript обработчика события для текстового поля:

    <INPUT name="edit1" size="50">    
    <SCRIPT type="text/vbscript">
      Sub edit1_changed()
        If edit1.value = "abc" Then
          button1.enabled = True
        Else
          button1.enabled = False
        End If
      End Sub
    </SCRIPT>

Ниже приводим такой же пример с использованием Tcl:

    <INPUT name="edit1" size="50">
    <SCRIPT type="text/tcl">
      proc edit1_changed {} {
        if {[edit value] == abc} {
          button1 enable 1
        } else {
          button1 enable 0
        }
      }
      edit1 onChange edit1_changed
    </SCRIPT>

Ниже указан пример JavaScript для связывания события со сценарием. Первый пример - простой обработчик щелчка мышкой:

    
<BUTTON type="button" name="mybutton" value="10">
<SCRIPT type="text/javascript">
      function my_onclick() {
         . . .
      }
    document.form.mybutton.onclick = my_onclick
 </SCRIPT>
 </BUTTON>

Ниже дан более интересный обработчик окна:

    
<SCRIPT type="text/javascript">
      function my_onload() {
         . . .
      }

      var win = window.open("some/other/URI")
      if (win) win.onload = my_onload
</SCRIPT>

В Tcl это выглядит следующим образом:

 <SCRIPT type="text/tcl">
     proc my_onload {} {
       . . .
     }
     set win [window open "some/other/URI"]
     if {$win != ""} {
         $win onload my_onload
     }
 </SCRIPT>

Обратите внимание, что "document.write" или эквивалентные выражения в обработчике внутренних событий чаще создают и вводят информацию в новый документ, а не модифицируют текущий документ.

18.2.4 Динамическая модификация документов

Сценарии, которые выполняются при загрузке документа, способны модифицировать содержание документа динамически. Эта способность зависит от самого языка сценария (например, выражение "document.write" в объектной модели HTML, поддерживаемой некоторыми производителями).

Динамическая модификация документа может моделироваться следующим образом:

  1. Все элементы SCRIPT оцениваются в порядке загрузки документа.
  2. Оцениваются все конструкции сценария внутри данного элемента SCRIPT, которые генерируют SGML CDATA. Текст, скомбинированный и сгенерированный ими, вставляется в документ на место элемента SCRIPT.
  3. Сгенерированные CDATA оцениваются повторно.

HTML-документы имеют ограничения при согласовании с файлом HTML DTD перед и после обработки любых элементов SCRIPT.

Следующий пример иллюстрирует, как сценарии могут модифицировать документ динамически. Следующий сценарий:

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

имеет такой же эффект, что и разметка HTML:

 <TITLE>Test Document</TITLE>
 <P><B>Hello World! </B>

← Назад | Вперед →
Copyright © 2006 -  aranea.ru