Российский государственный гуманитарный университет
Опубликован: 14.08.2003 | Доступ: свободный | Студентов: 23389 / 4435 | Оценка: 4.00 / 3.90 | Длительность: 10:03:00
Лекция 4:

Программируем свойства окна браузера

События объекта window

Остановимся вкратце на событиях, связанных с объектом window. Обработчики этих событий обычно помещают как атрибут контейнера <BODY>.

  • Load - событие происходит в момент, когда загрузка документа в данном окне полностью закончилась. Если текущим окном является фрейм, то событие Load его объекта window происходит, когда в данном фрейме загрузка документа закончилась, независимо от состояния загрузки документов в других фреймах. Использовать обработчик данного события можно, например, следующим образом:
    <BODY onLoad="alert('Документ полностью загружен.');">
  • Unload - событие происходит в момент выгрузки страницы из окна. Например, когда пользователь закрывает окно, либо переходит с данной Web-страницы на другую, кликнув ссылку или набрав адрес в адресной строке, либо при изменении адреса страницы (свойства window.location ) скриптом. Например, при уходе пользователя с нашей страницы мы можем позаботиться о его удобстве и закрыть открытое ранее нашим скриптом окно:
    <BODY onUnload="myWin.close();">
  • Error - событие происходит при возникновении ошибки в процессе загрузки страницы. Если это событие произошло, можно, например, вывести сообщение пользователю с помощью alert() или попытаться перезагрузить страницу с помощью window.location.reload(). В следующем примере мы назначаем обработчиком события Error функцию ff(), которая будет выдавать сообщение. В тексте программы мы допустили ошибку: слово Alert написано с заглавной буквы (помните, что в JavaScript это недопустимо?). Поэтому при открытии этого примера возникнет ошибка и пользователь получит об этом "дружественное" сообщение.
    <SCRIPT>
    function ff()
    { alert('Произошла ошибка. Свяжитесь с Web-мастером.'); }
    
    window.onerror = ff;
    
    Alert('Привет');
    </SCRIPT>
  • Focus - событие происходит в момент, когда окну передается фокус. Например, когда пользователь "раскрывает" свернутое ранее окно, либо (в Windows) выбирает это окно браузера с помощью Alt+Tab среди окон других приложений. Это событие происходит также при программной передаче фокуса данному окну путем вызова метода window.focus(). Пример использования:
    <BODY onFocus="alert('Спасибо, что снова вернулись!');">
  • Blur - событие, противоположное предыдущему, происходит в момент, когда данное окно теряет фокус. Это может произойти в результате действий пользователя либо программными средствами - вызовом метода window.blur().
  • Resize - событие происходит при изменении размеров окна пользователем либо сценарием.

Переменные как свойства окна

Глобальные переменные на самом деле являются свойствами объекта window. В следующем примере мы открываем окно с идентификатором wid, заводим в нем глобальную переменную t и затем пользуемся ею в окне-родителе, ссылаясь на нее как wid.t:

<HTML><HEAD>
<SCRIPT>
wid = window.open('','','width=750,height=100,status=yes');
wid.document.open(); R = wid.document.write;
R('<HTML><HEAD><SCRIPT>var t;<\/SCRIPT></HEAD>');
R('<BODY><H1>Новое окно</H1></BODY></HTML>');
wid.document.close();
</SCRIPT>
</HEAD>
<BODY>
<A HREF="javascript:
wid.t=window.prompt('Новое состояние:','');
wid.document.write(wid.t); wid.focus(); void(0);"
>Изменим значение переменной t в новом окне</A>
</BODY></HTML>
4.4. Изменение переменной открытого окна

Обратите внимание на нюанс: внутри скрипта мы написали <\/SCRIPT>. Комбинация " \/ " выдает на выходе " / ". Сделали мы это для того, чтобы браузер (точнее, его HTML-парсер) не воспринял бы </SCRIPT> как завершающий тэг нашего (внешнего) скрипта. Подробнее этот аспект обсуждался во вводной лекции. Также обратите внимание на алиас (синоним) R, который мы дали методу wid.document.write, чтобы иметь возможность кратко вызывать его как R(...).

Аналогичным образом (с приставкой wid, указывающей на объект окна) можно обращаться ко всем элементам, находящимся в открытом нами окне, например, к формам. В качестве примера рассмотрим изменение поля ввода в окне-потомке из окна-предка. Создадим дочернее окно с помощью функции okno(), в нем создадим форму, а затем обратимся к полю этой формы из окна-предка:

<HTML>
<HEAD>
<SCRIPT>
var wid; // Объявляем глобальную переменную
function okno()
{
  wid = window.open('','okoshko','width=500,height=200');
  wid.document.open(); R = wid.document.write;
  R('<HTML><BODY><H1>Меняем текст в окне-потомке:</H1>');
  R('<FORM NAME=f><INPUT SIZE=40 NAME=t VALUE=Текст>');
  R('</FORM></BODY></HTML>');
  wid.document.close();
}
</SCRIPT>
</HEAD>
<BODY>
<INPUT TYPE=button VALUE="Открыть окно примера" onClick="okno()">
<INPUT TYPE=button VALUE="Написать текущее время в поле ввода"
       onClick="window.wid.document.f.t.value=new Date();
                window.wid.focus();">
</BODY>
</HTML>
4.5. Изменение поля статуса в открытом окне

Открывая окно-потомок, мы поместили в переменную wid указатель на окно: wid=window.open(...);. Теперь мы можем использовать wid как идентификатор объекта класса Window. Вызов метода window.wid.focus() в нашем случае обязателен, поскольку при нажатии на кнопку "Написать текущее время в поле ввода" происходит передача фокуса в родительское окно (которое может заслонять вновь открытое окно, так что изменения, происходящие в окне-потомке, не будут видны пользователю). Для того, чтобы увидеть изменения, мы должны передать фокус в окно-потомок.

Переменная wid должна быть глобальной, т.е. определена за пределами каких-либо функций (как сделано в нашем примере). В этом случае она становится свойством объекта window, поэтому мы обращаемся к ней в обработчике onClick посредством window.wid. Если бы мы поместили ее внутри описания функции okno(), написав var wid = window.open(...), то мы не смогли бы к ней обратиться из обработчика события onClick, находящегося вне функции okno().

Объект document

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

Таблица 4.4. Свойства, методы и события объекта document
Свойства Методы События
URL
 domain
 title
 lastModified 
 referrer
 cookie

 linkColor
alinkColor
vlinkColor
open()
close()

write()
writeln()

getSelection()

getElementById()
getElementsByName()
getElementsByTagName()
Load
Unload

Click
DblClick

MouseDown 
MouseUp

KeyDown
KeyUp
KeyPress

Помимо перечисленных в этой таблице свойств, объект document имеет свойства, являющиеся коллекциями (форм, картинок, ссылок и т.п.); таблица 3.1 предыдущей лекции содержит их описание. Кроме того, можно формировать требуемые коллекции "на лету" с помощью указанных выше методов. Так, document.getElementsByTagName('P') есть коллекция всех HTML-элементов (точнее, соответствующих им объектов) вида <P>, т.е. абзацев. Аналогично, document.getElementsByName('important') выдаст коллекцию (объектов) HTML-элементов любых типов, у которых был задан атрибут NAME="important". Наконец, document.getElementById('id5') выдаст тот HTML-элемент (если их несколько, то первый), у которого был задан атрибут ID="id5".

С одним методом мы уже часто работали: document.write() - он пишет в текущий HTML-документ. Его модификация document.writeln() делает то же самое, но дополнительно добавляет в конце символ новой строки; это удобно, если потом требуется читать сгенерированный HTML-документ глазами. Если запись идет в HTML-документ нового окна, открытого с помощью window.open(), то перед записью в него нужно открыть поток на запись с помощью метода document.open(), а по окончании записи закрыть поток методом document.close(). После выполнения последнего действия произойдет событие Load (и вызовется соответствующий обработчик события onLoad ) у документа, а затем у окна.

События объекта document аналогичны одноименным событиям объекта window (только у document они происходят раньше), либо их смысл понятен из их названия, поэтому мы не будем детально их разбирать.

Остановимся вкратце на свойствах объекта document. Свойства linkColor, alinkColor и vlinkColor задают цвет гиперссылок - непосещенных, активных и посещенных, соответственно. Свойство URL хранит адрес текущего документа (т.е. строковый литерал, равный window.location.href, если страница состоит из единственного документа, а не является набором фреймов). Свойство domain выдает домен (оно аналогично window.location.hostname ). Свойство title выдает заголовок страницы (указанный в контейнере <TITLE> ), lastModified указывает на дату и время последней модификации файла, в котором содержится данный HTML-документ (без учета времени модификации внешних файлов - стилевых, скриптов и т.п.). Свойство referrer выдает адрес страницы, с которой пользователь пришел на данную web-страницу, кликнув по гиперссылке. Наконец, свойству cookie посвящен целый раздел в "Программируем "за кадром"" .

Валерий Банатин
Валерий Банатин

function f() { var i=5; k=7; } f(); alert(k);

В примере выдается результат k=7, однако, хоть переменная и не объявлена, она внутри функции, т.е. локальная и не должна быть видима, или вторая и последующие все-таки становятся глобальными?

Дамир Кантюков
Дамир Кантюков

Изучаю курс введение в JavaScript. 4 уроке есть код, где метод присвоен переменной, почему у меня не работает, браузер гугл:

<HTML><HEAD> <SCRIPT> wid = window.open('','','width=750,height=100,status=yes'); wid.document.open(); R = wid.document.write; R('<HTML><HEAD><SCRIPT>var t;<\/SCRIPT></HEAD>'); R('<BODY><H1>Новое окно</H1></BODY></HTML>'); wid.document.close(); </SCRIPT> </HEAD> <BODY> <A HREF="javascript: wid.t=window.prompt('Новое состояние:',''); wid.document.write(wid.t); wid.focus(); void(0);" >Изменим значение переменной t в новом окне</A> </BODY></HTML>