Объектная модель
В предыдущем разделе, мы уже отмечали, что JavaScript поддерживает возможность работы с объектами, и что набор объектов фиксирован, т. е. разработчик не может добавлять в него свои объекты. Все доступные объекты JavaScript представлены в виде разветвленной иерархии. Так же необходимо отметить, что все эти объекты относятся именно к окну просмотра HTML – документа в браузере. Каждый объект является совокупностью его свойств, методов и событий. Методы, как мы уже говорили – это некие действия, которые можно произвести с данным объектом, а события – это различные ситуации, возникающие при работе с объектом и адекватно отображающие изменения его состояния. Для каждого объекта набор его свойств, методов и событий уникален, поэтому все объекты необходимо рассмотреть максимально детально.
Иерархия объектов для программ-скриптов является единственной возможностью динамически управлять отображением Web-страниц. Фактически, это интерфейс доступа к внутренним механизмам браузера. И для того, что бы наши скрипты, реализующие возможности DHTML, могли работать в любом браузере, очевидно необходимо, чтобы объектные модели для всех браузеров совпадали. К сожалению, полного соответствия не произошло, и каждый браузер пользуется своей объектной моделью. Но различаются эти модели только в незначительных деталях, основные характеристики одинаковы для всех браузеров. По сути дела, производители браузеров лишь попытались добавить нечто свое к общепринятой модели.
В этой книге мы не будем рассматривать эти дополнения и изменения, и на т. е. веская причина. Еще несколько лет назад достаточно часто можно было встретить в Сети Web-странице с надписями "Эта Web-страница лучше всего отображается в браузере", и указывалось наименование того браузера, которому благоволил разработчик Web-страницы. К счастью, в последнее время в среде разработчиков все-таки распространилось мнение о недопустимости подобного поведения, поэтому всегда необходимо стараться создать Web-страницу, которая бы максимально одинаково отображалась во всех основных браузерах. Исходя из этих же соображений, мы рассмотрим только стандартную объектную модель DHTML, которая одинаково функционирует в каждом браузере.
Прежде чем мы перейдем к непосредственному рассмотрению объектов, следует сделать некоторое уточнение. Дело в том, что некоторые объекты в Web-страницах могут существовать только в единственном экземпляре, как например, объект window, олицетворяющий окно просмотра, а некоторых объектов может быть много. Так например, графические изображения, внедренные в состав содержимого Web-страницы, создают такое множество однотипных объектов. Подобные множества называются коллекциями, и больше всего похожи на массивы однотипных объектов. Доступ к какому-либо конкретному элементу коллекции производится при помощи указания наименования коллекции и порядкового номера интересующего нас элемента.
А вот теперь настало время перейти к непосредственному рассмотрению всего множества объектов, которым мы можем пользоваться для добавления некоей динамики и интерактивности к статичному содержимому наших Web-страниц.
Как мы не раз уже говорили, основой всего является объект window, который позволяет нам оперировать с окном просмотра браузера. Естественно, данный объект обладает набором свойств, методов и событий, который мы и рассмотрим. Следует отметить, что в этой части главы мы устроим лишь "обзорную экскурсию" по объектной модели, а примеры использования объектов рассмотрим немного позже. А сейчас вернемся к объекту window. Как известно, пользователь может открывать несколько копий программы-браузера, а значит, мы будем иметь несколько объектов window. Если при этом в качестве содержимого этих окон используются Web-страницы, взаимное вязанные между собой гиперссылками, то объекты window также связываются друг с другом при помощи некоторых свойств. Сейчас как раз пришло время рассмотреть все свойства объекта window.
- Свойство client содержит информацию о браузере, используемом пользователем для просмотра данной Web-страницы. Свойство имеет статус "только для чтения", т. е. его значение не может быть изменено в процессе действия программы-скрипта.
- Свойство status содержит текстовую строку,отображающуюся в строке; статуса в нижней части окна программы-браузера.
- Свойство defauitstatus содержит текст, отображаемый в строке статус по умолчанию,
- Свойство opener является ссылкой на окно просмотра, которое было открыто из текущего окна. То есть, в данном свойстве находится ссылка на дочернее окно;
- Свойство parent является ссылкой на родительское окно,, из которого открыли текущее.
- Свойство пате содержит наименование текущего окна.
- Свойство self содержит ссылку на данное окно, в сущности, при помощи этого свойства объект ссылается сам на себя.
- Свойство top содержит ссылку на самое первое окно в иерархии связанных друг с другом окон.
- Свойство closed имеет логический тип и сообщает, закрыто или открыто данное окно.
- dialogArguments – переменная параметр, или массив параметров, передаваемых диалоговому окну.
- dialogHeight – высота диалогового окна в пикселах.
- dial.ogwidth – ширина диалогового окна в пикселах.
- dialogic – вертикальная координата верхнего левого угла диалогового окна в пикселах.
- dialogieft – горизонтальная Координата верхнего левого угла диалогового окна в пикселах.
- returnvalue – применяется в модальных окнах диалогов, содержит значение, возвращаемое родительскому окну:,
Помимо свойств, естественно, имеется и список методов. Они реализованы в виде функций.
- Метод alert (messagestring) создает окно сообщения. Текст сообщения передается к параметре.
- Метод confirm (messagestring) отображает подтверждающее окно, текст которого передан в функцию в качестве параметра. Окно отличается от предыдущего наличием дополнительной кнопки Отмена.
- Метод snowModalpialogturl (url, header, attributes) создает модальное диалоговое окно. В параметрах передается URL отображаемого файла, заголовок окна и атрибуты создаваемого окна.
- Метод open (uri, header, attributes) открывает новое окно браузера. В параметрах передается URL HTML-документа, который будет отображаться в этом окне, заголовок нового окна просмотра и его параметры.
- Метод close () закрывает данное окно.
- Метод setTimeout (expression, time, language) создает таймер, который вычислит выражение или выполнит действие спустя определенное время. Выражение или код действия передается в параметре expression, язык, на котором оно записано – в параметре language, а время, по истечении которого произойдет вычисление выражения или выполнение инструкций,– в параметре time. Функция возвращает идентификатор, который предоставляет возможность управлять созданным таймером впоследствии. Одновременно можно создавать несколько таймеров с уникальными идентификаторами.
- Метод setinterval (expression, time) по своему действию очень похож на предыдущий метод setTimeout, но в отличие от него производит заданное действие не единожды, а многократно, каждый раз перед выполнением делая паузу, длительность которой указана в параметре time.
- Метод ciearTimeout (timerid) ликвидирует созданный таймер. В качестве параметра передается идентификатор ликвидируемого таймера, Который был получен как возвращаемое значение функции setTimeout.
- Метод clear interval (timerid) ликвидирует повторяющийся таймер, созданный при помощи метода setinterval. В качестве параметра передается идентификатор ликвидируемого таймера.
- Метод focus () устанавливает фокус ввода на данное окно. Одновременно инициализируется событие onfocus.
- Метод blur () принудительно сбрасывает фокус ввода с окна. Инициализируется событие onbiur.
- Метод prompt (message, defa (lt_value)) создает окно с полем ввода и текстом подсказки. Текст подсказки передается в параметре message, а значение, находящееся в поле ввода по умолчанию – в параметре default_value.
- Метод execscript (script, language) выполняет блок кода, который передается в параметре script, а в параметре language – язык, на котором он написан.
- Метод scroll (mode) позволяет принудительно показывать и скрывать) полосы прокрутки в окне просмотра браузера. Для отображения полос необходимо передать в параметре значение yes, для выключения – no.