document.linkColor = "#FF0000";
Оба рассмотренных нами объекта представляют собой соответственно видимый элемент страницы и саму страницу. Оба этих объекта были созданы с помощью тегов HTML. Теперь же мы начнем рассмотрение объектов, не являющихся элементами страницы. Это объекты Web-обозревателя, не видимые пользователю.
Объект document имеет внутренний объект location, предоставляющий доступ к интернет-адресу страницы и различным его частям. Доступен он через одноименное свойство. Воспользовавшись этим объектом, мы можем узнать, с какого интернет-адреса была загружена данная страница:
address = document.location.href;
выяснить имя файла этой страницы:
filename = document.location.pathname;
либо загрузить другую страницу:
document.location.href = "http://www.othersite.ru/otherpage.htm";
Объект window представляет текущее окно Web-обозревателя либо текущий фрейм, если страница загружена во фрейме. С помощью этого объекта вы можете, например, закрыть это окно:
window.close();
или заменить текст, отображаемый в его строке статуса:
window.status = "Сейчас работает Web-сценарий!";
Объект window имеет внутренний объект navigator, предоставляющий доступ к самой программе Web-обозревателя. Доступен он через одноименное свойство. Воспользовавшись этим объектом, мы можем выяснить, например, версию программы:
version = window.navigator.appVersion; илиназвание:
programName = window.navigator.appName;
Объект window имеет внутренний объект history, предоставляющий доступ к списку "истории" Web-обозревателя. Он доступен также через одноименное свойство. Воспользовавшись этим объектом, мы можем "путешествовать" по списку "истории" вперед:
window.history.forward();
и назад:
window.history.back();
В объектной модели документа существует также еще несколько других объектов, но рассматриваться они не будут. Эти объекты применяются достаточно редко и в весьма специфических случаях. Если же вы все-таки захотите узнать побольше об объектной модели документа, обратитесь к соответствующей литературе.
Как пишутся Web-сценарии
Вот и закончился ликбез по JavaScript и объектной модели документов. Пришло время поговорить о том, как же пишутся Web-сценарии.
Прежде всего, выясним, как JavaScript-код помещается в HTML-код. Для этого служит парный тег <SCRIPT>. . .</SCRIPT>, внутри которого помещается код сценария. Вне этого тега помещать сценарий можно, но выполняться он не будет.
Вообще, все Web-сценарии можно разделить на два вида: выполняющиеся при загрузке страницы (загрузочные) и вызывающиеся в ответ на событие (обработчики событий). В зависимости от того, является сценарий загрузочным или обработчиком, различается способ его реализации.
Сценарии, выполняющиеся при загрузке страницы, представляют собой обычный код на JavaScript, помещенный в тег <SCRIPT>. Он имеет такой вид:
<FORM ACTION="http://www.somesite.ru/cgi/prograra.p1">
<INPUT TYPE="text" NAME="txtDate"> <SCRIPT> var d;
d = new Date ();
document.forms[0].txtDate.value = d.toString(); </SCRIPT> </FORM>
Этот сценарий помещает в поле ввода txtDate значение текущей даты. (О формах и элементах управления см. главу 16.) Для этого он вызывает свойство value, отображающее значение, введенное в поле ввода. Заметьте, что для именования поля ввода мы использовали атрибут NAME, поэтому вышеприведенный код будет работать также и в Navigator 4.x.
Этот сценарий будет выполняться непосредственно при загрузке страницы. Сначала Web-обозреватель загрузит и распознает тег <FORM>, потом — тег <INPUT>, а сразу за ним выполнит наш сценарий. Такие сценарии очень часто используются для занесения начальных значений в элементы управления и вообще для выполнения различных предустановок.
Мы поместили код сценария сразу же за тегом, задающим поле ввода, к которому мы обращаемся. Если бы мы поместили сценарий перед тегом, Web-обозреватель не смог бы найти объект txtDate, т. к. он еще не был бы создан, и выдал бы сообщение об ошибке. Имейте это в виду, когда будете писать загрузочные сценарии.
Если нужно, чтобы какие-либо предустановки выполнились перед тем, как будет загружен какой-либо "видимый" на странице HTML-код, выполняющий их сценарий помещается в секцию HTML-заголовка страницы (тег <HEAD>). В основном, это касается кода, выполняющего предустановки для других сценариев, чаще всего, обработчиков событий.
Теперь поговорим о сценарии обработчика событий. И рассмотрим пример такого обработчика:
<HEAD>
<SCRIPT>
function para_onClick() {
para.style.color = "#FF0000"; }
</SCRIPT> </HEAD> <BODY>
<P ID="para" STYLE="color: #0000FF" onClick="para_ondick();">Некийтекст.</Р>
</BODY>
Это как раз пример сценария, помещаемого в секцию HTML-заголовка страницы. Он представляет собой функцию para_ondick, чей код меняет цвет текста абзаца para. Поместив сценарий в секцию HTML-заголовка, мы можем быть уверены, что Web-обозреватель обработает этот код перед тем, как будет загружена страница, и "отложит" определения функций в "долгий ящик", чтобы вызвать их впоследствии, при наступлении соответствующего события.
А теперь обратимся к нашему текстовому абзацу. Что видим? Нечто странное... Откуда-то взялся новый, не знакомый нам атрибут onclick. Что он делает?
Это не совсем атрибут. Вернее, совсем не атрибут, хотя и выглядит похоже. Таким способом в HTML к какому-либо событию, происходящему в элементе страницы, привязывается обработчик. Общий синтаксис такой "привязки" следующий:
<Имя события>="<Код сценария обработчика>"
В данном случае мы привязали вызов функции para_onclick в качестве обработчика к событию onclick, происходящему, когда пользователь щелкает мышью по этому абзацу.
Вообще, код этого обработчика столь мал, что его можно без всяких последствий поместить прямо в тег <р>:
<Р ID="para" STYLE="color: #0000FF" onClick="para.style.color = #'FF0000';">Heкийтекст.</Р>
Таким образом, мы значительно уменьшим размер HTML-кода страницы, что нам совсем не помешает.
Простейший Web-сценарий
Давайте создадим простейшую Web-страничку, содержащую работающий Web-сценарий. Этот сценарий будет выводить текущие дату и время.
<HTML>
<HEAD>
<ТIТLЕ>Сегодня</ТIТLЕ>
</HEAD>
<BODY> Р>
<SCRIPT LANGUAGE="JavaScript"> var d;
d=new Date ( ) ;
document. write (d.toString () ) ;
</SCRIPT>
</BODY>
</HTML>
Сохраните этот код в файле под именем 13.1.htm и откройте в Web-обозревателе. Вы увидите, что на странице будут стоять сегодняшние дата и время (рис. 13.1).
Рис. 13.1. Текущая дата на Web-странице
Давайте рассмотрим наш пример подробнее.
Если мы отбросим весь маловажный код, у нас останется единственный текстовый абзац <р>, внутри которого помещен сценарий. Вот он:
<р>
<SCRIPT LANGUAGE="JavaScript">
var d;
d=new Date();
document. write (d.toString( ) );
</SCRIPT>
Сам абзац не представляет собой ничего особенного. Сценарий — по большому счету, тоже. Мы уже познакомились с такими сценариями; они выполняются непосредственно при загрузке страницы и обычно производят различные предустановки. В нашем случае такой предустановкой является помещение в текстовый абзац строки, содержащей сегодняшние дату и время.
Как это происходит? С помощью метода write объекта document. Автор не рассматривал этот метод, когда говорил об объекте document. Все объекты. входящие в объектную модель документа, имеют множество свойств и методов, многие из которых используются в сценариях довольно часто. А объем книги ограничен; мы не можем уделять слишком много места описанию объектной 'модели в ущерб Dreamweaver. Поэтому кое о чем автор умолчал.
Теперь же настало время рассказать о методе write. Он помещает строку. переданную ему в качестве параметра, в то место документа, где встретилось выражение, вызывающее этот метод. Только и всего. В нашем случае он проделывает это со строковым значением текущей даты и помещает его внутри текстового абзаца <р>.
Остальной код вполне понятен. Мы объявляем переменную, помещаем в него значение текущей даты в виде объекта класса Date и преобразуем это значение в строку методом tostring. Вы также можете для этого использовать метод toLocaleString, выполняющий это преобразование с учетом национальных настроек операционной системы, но такой код, возможно, будет работать не во всех Web-обозревателях.
Более сложный Web-сценарий
В прошлой главе говорилось об анимации. Давайте же рассмотрим Web-сценарий, анимирующий какой-либо элемент страницы, а именно, заставляющий его двигаться по горизонтали взад-вперед. Вы увидите, что все это делается очень просто и довольно очевидно.
<HTML>
<HEAD>
<ТIТLЕ>Анимация</ТIТLЕ>
<STYLE>
DIV { font-size: 72; font-weight: bold }
</STYLE>
<SCRIPT>
var dx,timer; dx = 2;
function movelmage ( ) {
livediv. style. pixelLeft += dx;
if (livediv. style. pixelLeft + livediv. style. pixelWidth )
document.body.clientWidth) dx = -dx;
if (livediv. style. pixelLeft <= 0) dx = -dx;
}
function setupAnimation() (
timer = window. setlnterval ("movelmage ()", 100) }
</SCRIPT> </HEAD> <BODY onLoad="setupAnimation() ; ">
<DIV lD="div1" STYLE="top: 50; left: 50; position: absolute;
z-index: 1">J</DIV> <DIV ID="div2" STYLE="top: 50; left: 100; position: absolute;
z-index: -1">a</DIV> <DIV ID="div3" STYLE="top: 50; left: 150; position: absolute;
z-index: 1">v</DIV> <DIV ID="div4" STYLE="top: 50; left: 200; position: absolute;
z-index: -1">a</DIV> <DIV ID="livediv" STYLE="top: 80; left: 0; width: 30;
position: absolute"><IMG SRC="tips.gif "></DIV> </BODY> </HTML>
Сохраните этот код в файле под именем 13.2.htm. Графическое изображение tips.gif, использованное в этом примере, вы можете найти в папке Web, вложенной в папку Windows или WinNT. Поместите файл tips.gif в ту же папку, где находится файл 13.2.htm, после чего откройте последний в Web-обозревателе. К сожалению, рис. 13.2 не может передать движение.
Рассмотрение кода нашего примера начнем с секции HTML-заголовка страницы (тег <HEAD>). Здесь у нас находится небольшая таблица стилей с единственным стилем, переопределяющим шрифт тега <DIV>. Но, кроме того, здесь располагается код сценария. Он-то нас и интересует.