Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в HTML.doc
Скачиваний:
34
Добавлен:
21.03.2016
Размер:
957.44 Кб
Скачать

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

Скрипты, выполняемые при загрузке документа, могут использоваться для динамической модификации документа. Возможность сделать это зависит от самого языка скриптов (напр., оператор "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-последовательности для ">".