Опубликован: 19.05.2006 | Уровень: для всех | Доступ: платный
Лекция 18:

Сценарии (скрипты)

Динамическое изменение документов

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

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

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

Документы HTML должны соответствовать Определению Типа Данных (ОТД) HTML и до, и после обработки элемента SCRIPT.

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

Скрипт:

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

работает так же, как и:

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

Дизайн документов для ПА, не поддерживающих сценарии

В данном разделе рассматривается, как авторы могут создать документ, работающий с ПА, не поддерживающими скрипты.

Элемент NOSCRIPT

<!ELEMENT NOSCRIPT - - (%block;)+
  -- контейнер для альтернативного содержимого при отображении без использования скриптов -->
<!ATTLIST NOSCRIPT
  %attrs;                              -- %coreattrs, %i18n, %events --
  >
Начальный тег: необходим, Конечный тег: необходим

Элемент NOSCRIPT даёт авторам возможность предоставить альтернативное содержимое, если скрипт не выполняется. Содержимое элемента NOSCRIPT должно отображаться ПА, "понимающим" скрипты, только в следующих случаях:

  • ПА сконфигурирован так, чтобы не выполнять скрипты ;
  • ПА не поддерживает язык скриптов, ранее заявленный в элементе SCRIPT в этом документе.

ПА, не поддерживающие скрипты на стороне клиента, обязаны выводить содержимое этого элемента.

В следующем примере ПА, исполняющий SCRIPT, будет включать некоторые динамически создаваемые данные в документ. Если ПА не поддерживает скрипты, пользователь сможет запросить данные по гиперссылке.

<SCRIPT type="text/tcl">
 ...некоторый скрипт Tcl для вставки данных...
</SCRIPT>
<NOSCRIPT>
 <P>Перейдите на <A href="http://someplace.com/data">data.</A>
</NOSCRIPT>

Скрытие данных скрипта от ПА

Есть вероятность того, что ПА, не распознающие элемент SCRIPT, будут рассматривать его содержимое как текст. Некоторые машины скриптов, в том числе для языков JavaScript, VBScript и Tcl, разрешают включение операторов скрипта в комментарий SGML. ПА, не распознающие элемент SCRIPT, будут тогда игнорировать комментарий, в то время как более совершенные машины скриптов "поймут", что скрипт внутри комментария должен выполняться.

Другим решением проблемы является сохранение скриптов во внешнем документе и ссылка на него с помощью атрибута src.

Комментирование скриптов в JavaScript

Машина JavaScript допускает " <!-- " как начало элемента SCRIPT и игнорирует оставшиеся символы до конца строки. JavaScript интерпретирует "//" как начало комментария до конца текущей строки. Это необходимо, чтобы спрятать " --> " от разборщика JavaScript.

<SCRIPT type="text/javascript">
<!--  прячет содержимое скрипта от старых браузеров
  function square(i) {
    document.write("Вызов передан функции", i "<BR>")
    return i * i
  }
  document.write("Функция возвратила ",square(5),".")
// конец скрытия содержимого от старых браузеров  -->
</SCRIPT>

Комментирование скриптов в VBScript

В VBScript одиночная кавычка указывает, что оставшаяся часть строки должна рассматриваться как комментарий. Таким образом, она может использоваться для скрытия " --> " от VBScript, например:

<SCRIPT type="text/vbscript">
 <!--
   Sub foo()
    ...
   End Sub
 ' -->
</SCRIPT>

Комментирование скриптов в TCL

В Tcl символ " # " обозначает комментарий до конца строки:

<SCRIPT type="text/tcl">
<!--  прячет содержимое скрипта от старых браузеров
  proc square {i} {
    document write "Вызов передан функции $i.<BR>"
    return [expr $i * $i]
  }
  document write "Функция вернула [square 5]."
# конец скрытия содержимого от старых браузеров  -->
</SCRIPT>
Примечание. Некоторые браузеры закрывают комментарий при обнаружении первого символа ">", поэтому, для того, чтобы спрятать скрипт от таких браузеров, Вы можете поменять местами операнды в операторах сравнения и смещения (напр., использовать "y < x" вместо "x > y" ) или использовать зависимые от языка скриптов escape-последовательности для ">".
Ирина Кириллова
Ирина Кириллова

Нажимаю на ссылку на дополнительный материал и дополнение к информации-меня возвращает на первую страницу лекции. Подскажите, что делать? Или дополнительный материал платный?

Евгений Летенков
Евгений Летенков
Россия, Москва, РУДН, 2005
Иван Бокарёв
Иван Бокарёв
Австрия