Объекты документа и окна

После того как изложены основы программирования, можно перейти к изучению вопроса взаимодействия сценариев и объектов документа. Мы сделаем экскурс обратно к объектной модели документа. Более подробно останавливаться будем на тех объектах, которые в дальнейшем чаще всего используются в документе.

Объекты документа

Чтобы вспомнить, как выглядит самая общая иерархическая структура объектов документа, нужно взглянуть в рис. 1. На этом уроке наше внимание будет сконцентрировано на верхней части этой структуры: на объектах window, location, history и document. Главная цель — не просто загрузить вас багажом знаний, необходимых для решения простых задач, но также подготовить к глубокому и всестороннему исследованию, как каждого объекта, так и его свойств, методов, а также обработчиков событий. Здесь же описаны только основные свойства, методы и обработчики событий объектов — более подробную информацию о них можно будет получить позже. Если вам не терпится - пишите письма мне. Примеры, приведенные в этой главе, подразумевают, что вами полностью усвоен материал предыдущих глав, посвященный основам написания программ.

Рисунок1
Рис. 1.

Объект окна

В самом верхней части иерархической структуры объектов документа находится объект window. Этот объект занимает особое, привилегированное положение в наборе объектов, поскольку он представляет основной контейнер, в котором размещается все то, чем можно управлять с помощью Web-браузера. На протяжении всего времени, пока окно браузера открыто - даже если в нем не загружен ни один документ &mdash объект window будет определен в текущей объектной модели, хранящейся в памяти.

Область использования объекта окна достаточно широка — от регулирования непосредственно содержимого окна, вплоть до настройки его размеров. Размеры окна определяют область, в которой размещаются также полосы прокрутки, панели инструментов, строки состояния и меню (в Windows), короче все, что относится к атрибутам окна. Далеко не каждый браузер имеет средства управления этими элементами главного окна браузера. Однако всегда можно написать сценарий, создающий дополнительное окно, размеры которого можно изменять так, как нужно, и отображать в нем только самые необходимые элементы.

Хотя о подокнах (или фреймах) речь пойдет только на немного позже, на данном этапе можно совершенно спокойно утверждать, что каждый фрейм может рассматриваться как отдельный объект window. Использование системы фреймов весьма действенно, поскольку в каждом фрейме могут содержаться отдельные готовые документы. Когда в одном из этих документов запускается сценарий, то в иерархической структуре объектов соответствующее подокно рассматривается как объект window.

Как вы узнаете далее, объект Window удобно использовать для определения методов объектной модели документа, которые отображают вложенные диалоговые окна и управляют текстом, представляемым в строке состояния окна браузера. Методы объекта window позволяют создавать отдельное окно, которое будет отображаться на экране. Основная же часть всех свойств, методов и обработчиков событий объекта window связана с процессами отображения различных элементов окна.

Получение доступа к свойствам и методам окна

В сценарии ссылки на свойства и методы объекта window можно реализовать разными способами. Это определяется скорее прихотями программиста и стилем, которого он придерживается, чем определенными синтаксическими требованиями. Наиболее общим и логическим подходом является тот, в котором задается непосредственное обращение к объекту window:

window.propertyName                    
window.methodName([параметры])

К объекту window часто обращаются с помощью синонима. Делается это в тех случаях, когда в сценарии используются ссылки на окно, содержащее текущий документ. Синонимом является ключевое слово self. В таких случаях ссылки выглядят следующим образом:

self.propertyName. 
self.methodName([параметры])

Использовать подобные ссылки можно по собственному усмотрению. Однако целесообразно задавать ссылки с помощью self в сложных сценариях, в которых задействовано несколько фреймов или окон. Идентификатор self, другими словами, используется для обозначения того текущего окна, в котором находится документ с данным сценарием. А это, в свою очередь, делает сценарий более читабельным, по крайней мере так думают многие разработчики программных продуктов.

Как уже отмечалось, поскольку объект window всегда присутствует "на месте" при запуске сценария, то в ссылке на объекты внутри текущего окна его название можно опускать. В качестве примера ниже приведена синтаксическая модель обращения к свойствам и методам текущего окна.

PropertyName 
methodName([параметры])

Фактически, как это будет показано далее, принципы использования некоторых методов воспринимаются легче, если в ссылке не использовать ключевое слово window. В этом случае методы выполняются также прекрасно, как и ранее.

Создание окна

Главное окно браузера в сценарии не создается. Это делает пользователь при запуске браузера или при открытии документа с определенным URL или другого файла (если окно браузера не открыто до этого). Однако с помощью сценария можно сгенерировать любое число дополнительных окон (после того как главное окно открыто, и в него помещен документ, новые окна открывает сценарий главного окна).

Метод, с помощью которого можно генерировать новые окна,  — window.open(). В этом методе используется до трех параметров, которые определяют такие характеристики окна, как URL загружаемого документа, его название, указываемое в атрибутах TARGET дескрипторов HTML, а также физические параметры (размер и содержимое). Более детально на этих параметрах мы пока останавливаться не будем (в дебри полезем позже), однако одну важную концепцию использования метода window.open() все же рассмотрим.

Ниже приведен пример оператора, которые открывает новое окно предопределенного размера с отображенным документом HTML, расположенным в той же папке на сервере, в которой хранится текущая страница.

var subWindow = window.open("define.html","def", "HEIGHT=200,WIDTH=300")

Обратите внимание на то, что в приведенном выше коде используется оператор присваивания. Что-то присваивается переменной subWindow. Как это понимать? Оказывается, что при запуске метода window.open() не только открывается новое окно согласно использованным параметрам, но также создается ссылка на новое окно. На языке программирования можно сказать, что метод возвращает значение — в данном случае это самая настоящая ссылка на объект. Значение, возвращаемое методом, присваивается переменной.

Теперь эта переменная может вполне законно использоваться как ссылка на второе окно. Если нужно получить доступ к одному из его свойств или методов, то можно использовать указанную ссылку как часть полной ссылки. Например, для того чтобы закрыть прямо из сценария главного окна данное подокно, можно воспользоваться методом close().

subWindow.close()

Если в сценарии главного окна использовать записи window.close(), self.close() или просто close(), то будет закрыто главное окно, а вовсе не дополнительное. Поэтому для обращения к другим окнам следует использовать ссылку на нужное окно как часть общей ссылки. Этот момент важен при составлении сценариев: часто бывает желательно, чтобы переменная, содержащая ссылку на дополнительное окно, была доступна до тех пор, пока главный документ загружен в браузер. Чтобы обеспечить это, следует объявлять данную переменную как глобальную, но ни в коем случае не внутри функции (хотя значение этой переменной можно присваивать и в пределах функции). В такой ситуации можно использовать одну функцию, чтобы открывать окна, а другую для их закрытия.

Листинг 1 описывает страницу, которая содержит кнопку открытия нового, пустого окна, которое впоследствии можно закрывать из главного окна. Для того чтобы увидеть, как работает сценарий, следует задать размеры главного окна браузера так, чтобы оно не было развернуто во весь экран. Тогда при генерации нового окна можно разместить окна на экране так, чтобы можно было наблюдать новое окно даже когда основное находится на переднем плане. Если окно было при этом "скрыто" за основным, то для его отображения можно использовать меню Window (Окно) браузера. В листинге 1 переменная newWindow объявлена как глобальная, поэтому обе функции makeNewWindow() и closeNewWindow() без особых проблем получают к ней доступ. Если переменная объявляется без присвоения ей значения, то по умолчанию оно равно null. Значение null интерпретируется как эквивалентное false в условном операторе. С другой стороны, наличие в условном операторе любого ненулевого значения интерпретируется как true. В функции closeNewWindow() перед использованием метода закрытия close() сначала проверяется, было ли вообще создано новое окно. Затем, для выполнения очистки, переменной newWindow присваивается значение null, так что при повторном щелчке на кнопке Close (Закрыть) закрытие уже несуществующего окно не происходит.

Листинг 1. Ссылка на объекты окна.
<HTML>
<HEAD>
<TITLE>Window Opener and Closer</TITLE>
<SCRIPT LANGUAGE="JavaScript">
var newWindow
function makeNewWindow() {
newWindow = window.open("","","HEIGHT=300,WIDTH=300") } function closeNewWindow() {
if (newWindow) {
newWindow.close() newWindow = null
} }
</SCRIPT> </HEAD> <BODY> <FORM>
<INPUT TYPE="button" VALUE="Create New Window" onCiick="makeNewWindow() "> 
<INPUT TYPE="button" VALUE="Close New Window" onClick="closeNewWindow()"> 
</FORM> 
</BODY> 
</HTML>

Свойства и методы окна

Три описываемых в этой части метода и одно свойство объекта window имеют непосредственное отношение к задачам, часто решаемым пользователями. Они доступны во всех браузерах, поддерживающих сценарии. Естественно, это далеко не все методы и свойства окна. Но для начала хватит и этого. Более подробную информацию можно получить, если выслать мне вопрос.

Свойство window.status

Строка состояния в нижней части окна браузера при наведении на нее указателя мыши обычно отображает адрес URL ссылки. При загрузке документа, инициализации аплетов Java и подобных действиях в этой области отображаются другие сообщения. Тем не менее, с помощью JavaScript можно сделать так, что в определенные моменты в строке состояния будут отображаться собственные сообщения разработчика страницы, которые предоставляют полезную для пользователя информацию. Например, вместо того чтобы отображать адрес URL ссылки, можно вывести дружественное, доступное описание страницы (или комбинацию первого и второго, чтобы удовлетворить самые изысканные запросы).

Присвоить свойству window.status другое текстовое значение можно в любое время. Чтобы заставить текст в строке состояния изменяться каждый раз при наведении на ссылку указателя мыши, следует задать обработчик события onMouseOver для объекта ссылки. В JavaScript такое поведение задается крайне редко, однако в этом случае к таким мерам приходится прибегать, чтобы сценарий успешно перепрограммировал содержимое строки состояния.

Поскольку свойство window.status устанавливается достаточно просто, то наиболее общий подход для управления строкой состояния — это запуск в внутри дескрипторов операторов обработчика события. Это удобно при управлении небольшими сценариями, поскольку не требует определения отдельных функций или добавления дескрипторов <SCRIPT> на страницу. В дескриптор <А> оператор обработчика события добавляется без предварительного задания дескриптора сценария.

<А HREF="http://home.netscape.corn" onMouseOver= "window.status='Visit the Netscape Home page (home.netscape.com)'; return true"> Netscape</A>

Обратите особое внимание на операторы, используемые в обработчике события onMouseOver. Имеются в виду два следующих выражения:

window.status='Visit the Netscape Home page (home.netscape.com)'
return true

При запуске этих операторов внутри обработчика события нужно разделять их точкой с запятой. Пробел после точки с запятой ставить не обязательно, однако он повышает читабельность кода. Важно даже то, что весь набор операторов заключен в двойные кавычки (" . . . "). Чтобы вставить в двойных кавычках строку, присвоенную в качестве значения свойству window.status, следует заключить эту строку в одинарные кавычки ('...'). Настройка строки состояния в будущем принесет значительные дивиденды, а для этого нужно всего-то ввести несколько дополнительных строк кода. Как бы там ни было, а работа с успехом завершена. Все!

Метод window.alert()

В этом руководстве метод alert() уже использовался неоднократно. Он генерирует диалоговое окно, отображающее тот текст, который передается методу в качестве параметра. Единственная кнопка OK (надпись которой нельзя изменить) предназначена для того, чтобы пользователь мог закрыть окно предупреждения.

Внешний вид этого окна и двух других, которые будут описаны ниже, очень изменился с момента появления первого браузера, поддерживающего использование сценариев. В старых версиях браузеров в явном виде указано, что это окно предупреждения JavaScript ([JavaScript Application]). Разные браузеры отображают разные заголовки окон, что в сценарии изменено быть не может. Изменять можно только содержимое сообщений.

Все три упомянутых в этой главе метода отображения диалоговых окон прекрасно задаются без указания в ссылке объекта window. Даже несмотря на то, что метод alert() технически является методом объекта window, никаких специальных взаимоотношений между диалоговым окном и окном, отображающим диалоговое окно, не существует. В сценариях произвольного назначения обычно добавляют следующую ссылку.

alert("This is a JavaScript alert dialog")
 //Это диалоговое окно предупреждения JavaScript
 

Метод window.confirm()

В диалоговом окне другого типа используется уже две кнопки. Для большинства версий браузеров и платформ это кнопки ОК и Cancel (Отмена). Называется такое окно диалоговым окном подтверждения. Важным для метода является то, что он возвращает значение true, если пользователь щелкает на кнопке ОК, и false, если пользователь щелкает на кнопке Cancel. Это диалоговое окно и значение, им возвращаемое, можно использовать для того, чтобы предоставлять пользователю возможность управления дальнейшими действиями сценария.

Поскольку метод возвращает значение булевого типа, то оно может использоваться в качестве условного оператора в конструкции if или операторе if. . .else. Например, в приведенном ниже фрагменте кода у пользователя запрашивается подтверждение на запуск приложения. Результат подтверждения - это загрузка используемой по умолчанию страницы узла в браузере.

if (confirm( "Are you sure you want start over?")) {
location.href = "index.html" }

Метод window.prompt()

Последним диалоговым окном объекта window является диалоговое окно запроса В нем отображается определяемое разработчиком страницы сообщение и выводится текстовое поле для ввода ответа. Две кнопки, которые присутствуют в диалоговом окне, ОК и Cancel, позволяют пользователю закрыть диалоговое окно с двумя взаимоисключающими исходами: отменой всей операции или принятием того, что введено в текстовом поле.

Метод window.prompt() подразумевает использование двух параметров. Первый —сообщение, которое выводится пользователю в качестве подсказки. Второй параметр в виде строки используется для того, чтобы задать в текстовом поле предлагаемый по умолчанию ответ пользователя. Если никакой ответ по умолчанию предлагать пользователю не нужно, то в этом случае отображается пустая строка (две двойные кавычки без пробелов между ними).

Этот метод возвращает только одно значение при щелчке пользователем на любой из кнопок. Щелчок на кнопке Cancel возвращает значение null вне зависимости от того, что пользователь при этом ввел в текстовом поле. Если пользователь щелкнул на кнопке ОК, то в качестве значения будет возвращена введенная пользователем в текстовом поле строка. Сценарии могут использовать эту информацию в конструкциях if или if. . .else. Значение null в условном операторе при этом трактуется как false. Пустая строка также трактуется как false. Это значение можно использовать для непосредственной проверки того, введены ли вообще в текстовом поле данные, как это показано в следующем примере:

var answer = prompt("Как Вас зовут?") 
if (answer) {
alert("Hello,"+answer+"!")
}

Единственная ситуация, в которой вызывается метод alert(), имеет место тогда, когда пользователь ввел в диалоговое поле текст и щелкнул на кнопке ОК.

Обработчик события onLoad

Объект window реагирует на многочисленные события, генерируемые системой или пользователем. Но с одним событием придется работать чаще всех остальных. Оно возникает тогда, когда все элементы страницы успешно загружены. Это событие состоится только после того, как все изображения, аплеты Java и файлы данных полностью загружены в браузер. Получение из сценария доступа к элементам документа в процессе загрузки страницы может быть делом весьма опасным, поскольку, если объект еще не загружен (возможно, по причине использования плохого сетевого соединения или низкопроизводительного сервера), то в сценарии произойдет ошибка. Преимущество использования события onLoad состоит именно в том, что он позволяет использовать функции, обеспечивая наличие объектов документа в объектной модели. Все обработчики событий окна размещаются внутри дескрипторов <BODY>. Даже если установилась четкая связь атрибутов дескриптора <BODY> со свойствами объекта документа document, следует помнить, что обработчики событий окна window также располагаются внутри этих дескрипторов.

Объект Location

Иногда складывается впечатление, что объект в иерархической структуре представляет нечто такое, что не несет в себе реального физического смысла и не может быть представлено в воображении столь же наглядно, как, скажем, окно или кнопка. Именно это относится к объекту location. Данный объект содержит адрес URL, загруженного в окне документа. Он значительно отличается от объекта документа document (который будет обсуждаться в этой главе несколько позже) хотя бы потому, что документ имеет реальное содержимое. location — это только URL.

Если вы не относитесь к экспертам Web-технологий, то можете даже не подозревать, что URL состоит из многих компонентов, которые определяют расположение ресурса и методы отправки данных файла. В состав URL входят сведения о протоколе (таком, как http://) и названии узла (например www.giantco.com). Получать отдельный доступ ко всем этим элементам можно как к обычным свойствам объекта location. Но, как правило, практический интерес представляет только одно свойство —href, которое определяет URL полностью.

Ссылаться на другие страницы сценарий сможет только тогда, когда правильно задано свойство location.href. Например:

location.href = "http://www.dannyg.com"

Путешествовать по страницам в пределах собственного Web-узла можно, указывая только относительный URL (т.е. адрес относительно текущей страницы), и для этого совсем не обязательно использовать полный URL со всеми его протоколами и информацией об узле. Для представления страниц вне домена текущей страницы нужно обязательно указывать полный URL.

Если загружаемая страница будет находиться в другом окне или фрейме, то ссылка на окно должна содержать его адрес. Например, если сценарий открывает новое окно и присваивает на него ссылку переменной newWindow, то оператор, загружающий страницу в подокно, будет выглядеть следующим образом:

newWindow.location.href = "http://dannyg.com"

Объект History

Еще один объект, который в явном виде на странице не представлен,  — это history. Каждое окно поддерживает список последних посещаемых браузером страниц. Объект history используется для запоминания адресов URL посещаемых страниц. Однако в общем случае эти URL недоступны для сценариев по причине предпринимаемых в браузерах мер защиты данных. Однако методы объекта history позволяют путешествовать вперед и назад по списку посещенных страниц относительно текущей загруженной страницы. Подробнее эта тема будет рассмотрена позже.

Объект документа

В объекте документа document хранится все реальное содержимое страницы. Свойства и методы объекта document в основном воздействуют на внешний вид и содержимое страницы, загруженной в окне. Только в самых последних моделях браузеров (IE4+ и NN6+) можно с помощью сценария получать доступ к тексту страницы в том случае, когда документ полностью загружен. Тем не менее метод document.write() позволяет динамически создавать содержимое в процессе загрузки страницы. Огромное число свойств объекта document определяется атрибутами дескриптора <BODY>. Многие другие свойства являются массивами прочих объектов документа.

Получать доступ к свойствам и методам объекта document достаточно просто, как это и показано ниже.

[window.]document.propertyName 
[window.]document.methodName([параметры])

Ссылка на окно [window.] при получении сценарием доступа к объекту document, содержащему его, является необязательной.

Свойство document.forms[]

Еще один тип объектов, содержащихся в документе,  — это объекты элементов форм FORM. Поскольку в принципе на странице может использоваться больше, чем одна форма, то все они собираются в виде массива свойств документа document.forms[]. Числовой индекс внутри квадратных скобок указывает на один из элементов массива. Чтобы выяснить, сколько всего форм FORM используется в данном документе, можно воспользоваться следующей командой:

document.forms.length

Для получения доступа, скажем, к первой форме документа, следует использовать такую ссылку.

document.forms[0]

Обычно тем не менее, можно порекомендовать ссылаться на формы с помощью названий, которые присвоены этим формам в атрибуте NAME, как показано ниже.

document.formName

Использование любого из указанных способов приводит к одинаковому результату. Если в сценарии нужно сделать ссылку на элемент внутри формы, то полный адрес объекта обязательно должен содержать ссылку на document и на саму форму.

Свойство document.title

Не каждое свойство объекта document устанавливается в атрибутах дескриптора <BODY>. Если заголовок страницы указать в дескрипторе <TITLE> раздела <Head>, то текст с этим названием будет отображаться в свойстве document.title. Заголовок документа является самым, пожалуй, "косметическим" свойством, поскольку используется для определения того текста, который отобразится в строке заголовка браузера, точно так же, как список посещенных страниц и закладка на страницу.

Метод document.write()

Метод document.write() используется как в непосредственно исполняемых сценариях для создания содержимого загружаемой страницы, так и в сценариях, которые создают новое содержимое в текущем или другом окне. Для использования метода нужно указать один строчный параметр, который является элементом HTML, вводимым в окно или фрейм. В качестве указанных строчных параметров могут использоваться переменные или другие выражения, которые преобразуются в строки. Очень часто к ним относятся HTML-дескрипторы.

Помните, что после того как страница загружена, выходной поток броузера автоматически закрывается. После этого каждый новый вызов метода document.write() приводит к открытию нового потока, что, в свою очередь, вызывает немедленную очистку текущей страницы (вместе со всеми переменными и другими значениями в исходном документе). Поэтому, если вам нужно переместить текущую страницу с помощью генерируемого в сценарии HTML-кода, составьте этот код в виде переменной и отобразите соответствующий текст с помощью метода document.write(). Нет необходимости выполнять очистку документа в явном виде и открывать новый поток данных. Для этого достаточного одного вызова метода document.write().

Еще один полезный совет, относящийся к использованию метода document.write(), имеет отношение к его сородичу и собрату, методу document.close(). Сценарий должен уметь закрывать выходной поток по окончании записи содержимого в окно (как свое, так и чужое). После последнего вызова метода document.write() в сценарии следует использовать метод document.close(). В противном случае может оказаться, что изображения и формы не будут отображаться. Любое использование метода document.write() впоследствии способствует только добавлению данных на страницу, что предпочтительнее по сравнению с очисткой содержимого и записью его заново. В качестве примера использования метода document.write() приведено две версии одного приложения, В первом случае запись производится в тот же документ, который содержит сценарий. Во втором случае запись производится в отдельное окно. Введите в текстовом редакторе каждый из документов, сохраните файлы с расширением .html и откройте с помощью браузера.

В листинге 2 используется кнопка, которая вызывает новое содержание HTML для документа, включая дескрипторы HTML для заголовка нового документа и атрибуты цвета дескриптора <BODY>. В листинге присутствует оператор, который ранее не описывался. Это оператор +=. Данный оператор добавляет к строке, содержащейся переменной слева от него, строку, расположенную справа от оператора. Этот оператор позволяет удобно и быстро объединять длинные строки из нескольких отдельных операторов. Используя содержимое переменной newContent и всего один вызов метода document.write(), можно придать всему документу полностью новое содержимое, не оставив даже следа от содержимого листинга 2. Оператор document.close(), тем не менее, в обязательном порядке используется для нормального закрытия выходящего потока. Теперь загрузите документ, щелкните на кнопке и обратите внимание на то, как изменится название документа в строке названия браузера. Если после этого щелкнуть на оригинале и затем снова воспользоваться кнопкой, то динамически заполняемая вторая страница будет загружаться намного быстрее, даже по сравнению с перезагрузкой исходного документа.

Листинг 2. Использование метода document.write()
<HTML>
<HEAD>
<TITLE>Writing to Same Doc</TITLE>
<SCRIPT LANGUAGE="JavaScript">
function rewrite() {
// Вызов содержимого для нового окна
var newContent = "<HTML><HEAD><TITLE> Doc</TITLE></HEAD>"
newContent += "<BODY BGCOLOR='aqua'><Hl>This document is brand new. </Hl>"
newContent += "Click the Back button to see original document."
newContent += "</BODY></HTML>"
// Записывается HTML в новое окно документа
document.write(newContent)
document.close() // Закрытие потока }
</SCRIPT> 
</HEAD> 
<BODY> 
<FORM>
<INPUT TYPE="button" VALUE="Replace Content" onClick="reWrite()"> 
</FORM>
</BODY> 
</HTML>

В листинге 3 ситуация несколько сложнее, поскольку сценарий создает подокно, в которое записывается целый документ, сгенерированный сценарием. Чтобы ссылка на новое окно была доступна для всех функций, переменную newWindow объявляют как глобальную. Сразу после того как страница загружена, обработчик события onLoad вызывает функцию makeNewWindow(). Эта функция создает пустое подокно. Третьему параметру метода window.open() добавлено свойство, дающее инструкцию строке состояния подокна на отображение данных.

Кнопка на странице используется для вызова метода subWrite. Первым заданием, которое он выполняет, является проверка свойства closed подокна. Это свойство (которое введено только в последних версиях браузеров) возвращает значение true, если окно, на которое сделана ссылка, закрыто. Если это так (пользователь самостоятельно закрыл окно), то будет вызвана функция makeNewWindow() и окно будет снова открыто.

При открытом окне будет вызвано в виде строчной переменной новое содержимое. Как и в листинге 2, содержимое записывается в один подход (хотя это и не является обязательным для отдельного окна), после чего сразу вызывается метод close(). Здесь обратите внимание на важную особенность: как в методе write(), так и в методе close() подокно задается в явном виде.

Листинг 3. Использование метода document.wite() с другим окном
<HTML>
<HEAD>
<TITLE>Writing to Subwindow</TITLE>
<SCRIPT LANGUAGE="JavaScript">
var newWindow
function makeNewWindow () {
newWindow = window, open (".", "", "status,height=200,width=300") } function subWrite() {
// Создается новое окно в том случае, если кто-то его закрыл
if (newWindow.closed) { makeNewWindow()
}
// Выведение окна на передний план
newWindow.focus()
// Вызов содержимого для нового окна
var newContent = "<HTML><HEAD><TITLE>A New Doc</TITLE></HEAD>"
newContent += "<BODY BGCOLOR=' coral '><Hl>This document is brand new. </Hl>"
newContent += "</BODY></HTML>"
// Запись HTML в новый документ окна
newWindow.document.write(newContent)
newWindow.document.close() // Закрытие потока }
</SCRIPT> </HEAD>
<BODY onLoad="makeNewWindow()">
<FORM>
<INPUT TYPE="button" VALUE="Write to Subwindow" onClick="subWrite()"> 
</FORM> 
</BODY> 
</HTML>

Объект ссылки

Объект ссылки в иерархической структуре относится к подобъектам объекта document. Объект ссылки —это эквивалент элемента дескриптора <А>, когда этот дескриптор содержит атрибут HREF. Документ может содержать произвольное число ссылок, так что указания на эти ссылки (если они необходимы) обычно реализуются посредством индексов массивов.

document.links[n].propertyName

Если говорить в общем, то сценарии для управления ссылками малополезны. Тем не менее, для управления этими объектами в JavaScript задается один весьма важный компонент. Если нужно щелкнуть на ссылке для того, чтобы выполнить в первую очередь сценарий, а не перейти к другому URL, то нужно переопределить атрибут HREF для вызова функции сценария. Методика подразумевает использование вызова псевдо-URL в формате: javascript: URL. Если после javascript: URL ввести название функции, то браузер запустит эту функцию. Чтобы до конца не сбить с толку пользователей, желательно, чтобы эта функция, в конечном счете, использовалась для перемещения к другому URL. Кроме того, сценарий с успехом может справиться и с другими заданиями, вроде одновременного изменения содержимого двух подокон.

Вот пример использования указанного объекта:

<А HREF="javascript:void functionName([параметр1]...[параметрN])">.. </А>

Ключевое слово void предотвращает попытку отображения любого значения, которое может возвращать соответствующая функция. Помните, что методика использования записи javascript: URL применима ко всем дескрипторам, в состав которых входят атрибуты HREF и SRC: если атрибут принял URL, он также воспримет и javascript: URL. Этот метод полезен в качестве способа программирования клиентских карт изображений, когда все необходимые действия нужно выполнить на странице, не переходя при этом к другим ресурсам.

Следуя логике иерархической структуры объектов, после изучения документа следует перейти к форме. Этому элементу посвящен следующий урок.




Упражнения к уроку


Hosted by uCoz