Опубликован: 19.05.2006 | Доступ: свободный | Студентов: 9832 / 1470 | Оценка: 4.29 / 4.03 | Длительность: 22:29:00
ISBN: 978-5-94774-648-8
Лекция 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-последовательности для ">".
Ирина Кириллова
Ирина Кириллова

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

Марина Дайнеко
Марина Дайнеко
Россия, Moscow, Nope, 2008
Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989