DHTML
Объектная модель браузера.
Описании сценариев.
Здравствуйте, уважаемые читатели!
Через этот промежуток летнего отпуска я рад снова приступить к своим
обзорам. Честно сказать, перед написанием этого обзора я долго думал,
как же преподнести ту громадную информацию по DHTML, которая существует...
Но, поскольку данная рассылка все-таки называется "азы...", я решил
начать действительно с основ. Возможно, что данный обзор покажется многим
не очень интересным или уже знакомым, однако, возможно, для многих он
будет открытием. По крайней мере, я посчитал, что обойтись без данных
знаний многим, только начинающим разбираться в web-дизайне, данный обзор
будет просто необходим.
Итак, приступим к рассмотрению объектной модели браузера.
Сразу предупреждаю, что дать полное и подробное описание нет возможности
в небольшом обзоре (для этой темы пришлось бы делать отдельный цикл),
впрочем, для нормального знания DHTML подобного и не нужно.
(Не могу удержаться от истории: впервые объектная модель появилась в
браузере Netscape 2, за что его сразу же полюбили).
Объектная модель - интерфейс между исходным текстом страницы на языке
HTML и программой браузера, которая в свою очередь создает окно и заполняет
его элементами, которые определены на странице. Как это происходит не
столь важно. Важно учесть другое: DHTML - теоретически платформенно-независимый
язык, следовательно все браузеры, поддерживающие DHTML должны иметь
одну и ту же объектную модель, иначе невозможно создать страницы корректно
работающие в разных браузерах. Объектную модель можно определить как
совокупность объектов, методов и свойств, а также событий, которые имеются
и происходят в программном обеспечении браузера.
Теперь давайте поясним, что такое объекты, методы, свойства на простом
примере.
Объектом мы можем назвать телевизор, который включается и выключается
по установленному нами таймеру, но как это происходит знать для нас
совершенно необязательно.
Метод - это способ работы с объектом (телевизором), кнопки
включить, выключить, переключить канал (мы не указываем телевизору в
каком порядке должны идти электроны из трубки, мы лишь нажимаем кнопки).
События - способ объекта сообщить нам о том, что произошло:
телевизор выключится при долгом отсутствии изображения.
Свойства - это некие характеристики: громкость, яркость
нашего телевизора (эти свойства мы можем менять). Или же свойства read-only
(только для чтения): дата выпуска телевизора. (изменить их мы не можем,
можем лишь обратиться к ним, спросить о них "телевизор")
После краткого описания того, что такое есть объектная модель, давайте
приступим к описанию сценариев и того,
что это такое. Образно говоря, сценарий- это способ научить
страницу реагировать на события, давая возможность общаться с пользователем,
чего не могли сделать страницы, написанные на языке HTML 3.2.
Откуда берутся события? (см. объектная модель браузера) Когда вы щелкаете
по какому-то объекту в среде Windows, операционнная система формирует
некое событие.
В случае с браузером и DHTML постоянный обмен событиями позволяет странице
реагировать на сообытия идущие от браузера. И главное, именно создатель
страницы может определить на какие события отвечать странице и какие
инструкции дать при этом браузеру. Однако, чтобы страница отреагировала
на событие, она должна его сначала получить. И мы решим, как длжен отреагировать
браузер: например, при клике на ссылку браузер перейдет на другую страницу,
но произойдет и событие onclick, отреагировать на которое мы
и можем.
Итак, наша задача "захватить" событие и передав его коду
на странице, решить нужна ли на него какая-то реакция.
Всего существует 39 событий, которые браузер может передать коду. Но!
Каждому элементу в отдельности можн определить лишь ограниченное их
количество. Например, тег <h2> поддерживает 14 событий, <img>
- 25 и т.д. (Если вас заинтересует список тегов, поддерживающих то
или иное событие, пишите, это будет представлено в следующих обзорах).
Маленькое, но необходимое отклонение от темы.
Языки на которых создаются сценарии: JavaScript, VBScript (а также различные
"вариации": JScript- написанный Microsoft, например). Сразу вставлю
пару слов о своей любимой теме - совместимости. Сценарии поддерживаются
и NN и IE начиная с третьих версий. Но: IE 4 и выше поддерживает JavaScript,
JScript, VBScript; NN поддерживает только Java Script (если в нем не
установлен интерпретатор VBScript). Таким образом, на мой взгляд, стоит
изучить Java Script, чем писать на очень похожем, и гораздо более простом
в изучении и применении VBScript.
И еще пару слов о том, где расположить сценарий: он должен находится
между тегами <script> и </script>, это ясно, но где на странице?
Решать вам! Какие есть варианты и в чем их преимущества:
- поместить сценарий в теге <head>. В этом случае
код выполниться перед тем, как загрузиться содержимое страницы (например,
для вставки времени или для того чтобы сделать предзагрузку картинок)
- в конце страницы: тогда основная часть страницы
будет загружена до того, как интерпретатор выполнит заданные кодом действия
- в середине страницы - что-то среднее между двумя
вариантами.
Решать вам, согласно вашим целям.
А теперь, после небольшого пояснения, вернемся к тому, как же возможно
передать союбытие коду сценария на странице. Я не буду, по указанным
выше причинам, рассматривать способы передачи события коду в языке VBScript,
скажу лишь, что существует 4 способа. В Java Sсript не так много возможностей
для обработки кода. У этого языка есть 2 особенности:
- в нем поддерживаются только функции,
- он понятен всем браузерам - это принятый стандарт.
(см выше)
Самый привычный способ поймать событие
<script language=JavaScript>
<!--
function fun1(){ //объявление названия функции
if(confirm("Хочется загрузить эту страницу?")){ //окно
подтверждения, если верно, то выполняется следующая строка
alert('Отлично! Уже загружено') //после согласия будет
загружена страница
}
else {alert('Ну и не надо! :((')
window.location.href="http://www.rusmedserv.com/pedsurg/"}; //если
согласие не дано, то браузер будет переадресован на другую страницу.
}
//--></script>
А теперь как поймать событие:
<body onunload="fun1()">
Привет, рад, что загрузились!
</body>
При полной загрузке страницы будет выполнена функция fun1().
Второй способ - поместить код непосредственно в элемент:
<h2 onclick="alert ('Не кликай по мне!')">Кликни меня! </h2>
Третий способ - написать для каждого элемента свой код:
<h2 id=head2> Сделай двойной клик по мне! </h2>
<script for=head2 event=ondblclick>
<!--
alert('Отличный двойной клик!')
//-->
</script>
Есть еще пара способов, они используются для обработки событий на уровне
window - главного элемента в объектной модели браузера. Например в IE
мы можем использовать следующий способ:
<html onclick="fun2()">
При клике где - то на странице, будет выполнена функция fun2
И еще одна вариация. Данный метод не является общепринятым и похож на
использование VBScript <h2 id=head2> Сделай двойной клик по мне!
</h2>
<script >
<!-- function head2.ondblclick(){
alert('Отличный двойной клик!')}
//-->
</script>
То же для всего окна:
<script >
<!--
function window.onload(){
alert('Я отлично загрузилась!')}
//-->
</script>
И в окончании обзора я хотел бы привести список всех событий доступных
для обработки в DHTML. Если мне удасться продолжить свои обзоры, то
этот список будет просто необходим.
onabort- Возникает, когда пользователь прерывает загрузку картинки
onafterupdate- Возникает при окончании передачи данных
onbeforunload- Перед выгрузкой страницы, что позволяет сохранить
данные
onbeforeupdate- Возникает перед выгрузкой страницы
onblur- Выход окна из фокуса
onbounce- Происходит в элементе <MARQUEE>, когда значение
свойства BEHAVIOR ‰ALTERNATE и содержимое доходит до конца
onchange- Происходит при изменении содержимого элемента
onclick- Происходит, когда кнопка мыши щелкнута на документе
ondataavailable- Происходит периодически, когда данные приходят
из асинхронного источника
ondatasetchanged- Происходит при изменении порядка данных, например,
при применении фильтрации данных
ondatasetcomplete- Возникает, когда все данные из источника становятся
доступными
ondblclick- Происходит, когда пользователь дважды щелкает на
документе
ondragstart- Происходит, когда пользователь начинает перетаскивание
мышью
onerror- Ошибка при передаче
onerrorupdate -- Возникает при отмене изменения данных событием
onbeforeupdate, заменяя событие
onafterupdate
onfilterchange- Возникает при смене состояния статического фильтра
или при окончании перехода динамического
onfilterevent- Происходит, когда завершен данный переход фильтра
onfinish- Происходит при окончании цикла в элементе <MARQUEE>
onfocus- Элемент становится активным
onhelp- Нажатие пользователем клавиши F1 или Help
onkeydown- Возникает при нажатии клавиши
onkeypress- Возникает при нажатии клавиши и продолжается при
удержании клавиши в нажатом состоянии
onkeyup- Возникает, когда пользователь отпускает клавишу
onload- Возникает при полной загрузке элемента
onmousedown- Происходит, когда пользователь нажимает кнопку мыши
onmousemove- Происходит, когда пользователь двигает мышь
onmouseout- Происходит, когда курсор мыши выходит с элемента
onmouseover- Происходит, когда курсор мыши впервые входит на
элемент
onmouseup- Происходит, когда пользователь отпускает кнопку мыши
onreadystatechange- Возникает при изменении свойства
readystate
onreset- Происходит при очистке формы
onresize- Изменение пользователем размеров окна
onrowenter- Происходит при изменении данных в текущей строке,
и доступны новые данные
onrowexit- Происходит перед изменением данных в текущей строке
источником
onscroll- Прокрутка окна пользователем
onselect- Происходит при изменении текущего выделения
onselectstart- Происходит, когда пользователь в первый раз запускает
выделенную часть документа
onstart- Происходит при начале прокрутки бегущей строки элемента
MARQUEE
onsubimt- Происходит при отсылке формы на сервер или нажатии
кнопки SUBMIT
onunload- Непосредственно перед выгрузкой страницы.
И в заключении.
Я рад продолжать свои обзоры. В следующих выпусках, если вы сочтете
их необходимыми, я постараюсь начать рассмотрение объектов браузера,
начиная с объекта
window. Думаю, что данный обзор, вполне возможно,
вышел несколько неясным и непонятным, однако при подробном рассмотрении
объектной модели и, следовательно рассмотрении создания динамических
страниц, знания полученные в данном обзоре будут просто жизненно необходимы.
Не пугайтесь, если обзор вышел крайне неясным. При рассмотрении объектной
модели все встанет на свои места. Вроде все.
И обычная просьба: пишите, советуйте. Ваши письма, отзывы очень важны
и играют огромную роль при написании обзоров. Я с огромным вниманием
рассмотрю все предложения, а также советы и вопросы. Спасибо всем, кто
пишет, предлагает, советует.
С уважением,
Петров Михаил.
http://www.rusmedserv.com/pedsurg