Опубликован: 19.10.2006 | Уровень: для всех | Доступ: свободно
Лекция 7:

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

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Аннотация: Объект документа (document) и объект окна (window). Функции setTimeout и setInterval, window.opener, document.body и document.documentElement. Cвойства документа title, referer и cookies.

В предыдущей лекции рассматривалось использование объекта документа. Были показаны функции document.forms, document.getElementById, document.createElement и некоторые другие, которые встроены в объект document. В этой лекции будут подробно рассмотрены объект документа ( document ) и объект окна ( window ), которые обладают многими полезными функциями.

Объект document представляет реальное содержимое страницы и поэтому имеет функции, которые помогают изменить саму страницу. Например, запись на странице происходит с помощью document.write, а обращение к форме - с помощью document.forms.

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

Объект window, кроме того, что находится в вершине DOM, является также глобальным объектом. Во "второй лекции" мы говорили о том, что любая переменная обладает глобальной или локальной областью действия. Если она имеет глобальную область действия, то она доступна в любом месте сценария JavaScript. Обладание глобальной областью действия означает также, что переменная соединена непосредственно с объектом window. Любой код JavaScript, который не находится внутри какой-то функции, находится в глобальном объекте window.

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

Объект Window

Прежде всего объект window предоставляет доступ к информации об окне:

Свойство Описание
window.location возвращает текущий URL окна
window.opener Если окно было открыто другим окном (с помощью window.open ), то возвращается ссылка на открывающее окно, иначе null
MSIE: window.screenTop Другие: window.screenY Возвращает верхнюю позицию окна. Отметим, что эти значения в MSIE существенно отличаются от других браузеров. MSIE возвращает верхнюю позицию области содержимого (ниже адресной строки, кнопок, и т.д.). Другие браузеры возвращают верхнюю позицию реального окна (выше кнопки закрытия)
MSIE: window.screenLeft Другие: window.screenX Возвращает левую позицию окна с такими же различиями, как и для screenTop и screenY

Положение окна на экране пользователя редко бывает необходимо, но два других свойства, location и opener, будут очень полезны. Свойство window.location выполняет две функции. Если изменить его с помощью JavaScript, например, window.location='http://www.htmlgoodies.com', то браузер будет перенаправлен на эту страницу. Чтение window.location выдает адрес текущего документа. Зачем это нужно знать? Обычно адрес страницы не нужен, но может потребоваться строка запроса или анкер. Возьмем, например, следующий URL:

http://www.somesite.com/page.asp?action=browse&id=5#someAnchor. Этот URL можно разбить на три части:

URL: http://www.somesite.com/page.asp
Строка запроса: action=browse&id=5
Анкер: someAnchor

Так как window.location содержит всю эту информацию, то можно написать функцию, которая будет возвращать переменную querystring (строку запроса). Это аналогично request.querystring в ASP или $_GET в PHP, если вы знакомы с каким-либо из этих языков:

function queryString(val){
  var q  = unescape(location.search.substr(1)).split('&');

  for(var i=0; i<q.length; i++){
    var t=q[i].split('=');
    if(t[i].toLowerCase()==val.toLowerCase()) return t[1];
  }
  return '';
}

Для предыдущего URL функция queryString('action') вернет 'browse'. Мы видим здесь новую функцию window.unescape. Функция unescape, а также ее дополнительная функция escape, используются в соединении с window.location. При передаче данных в строке запроса она должна быть экранирована (escaped), чтобы она не влияла на саму строку запроса. Если, например, среди данных имеется знак амперсанд ( & ), то необходимо его экранировать, чтобы можно было различить этот знак в данных и тот &, который разделяет два различных значения. Функция escape подготавливает посылаемые данные для использования в качестве значения querystring, поэтому она используется при задании window.location. Например:

window.location='/page.asp?name='+escape(SomeInputBox.value);

Функция unescape делает обратное и позволяет получить "нормальный" текст из window.location.

Вернемся к свойствам window, где имеется свойство opener. Это свойство используется в соединении с обычно используемой функцией window.open, которая позволяет открывать новое окно браузера и, для некоторых свойств управлять его выводом. Блокировщики всплывающих окон очень часто будут препятствовать открытию окна с помощью window.open, если в этот процесс не вовлечен щелчок мышью. Поэтому, если в коде имеется вызов window.open и при этом пользователь не щелкает на ссылке или чем-то подобном, то скорее всего это не будет работать.

Функция window.open получает до 3 аргументов: URL окна, которое надо открыть, имя окна и свойства окна.

var newWindow=window.open('', 'newWindow', 'width=200,height=200');
newWindow.document.write('Это окно будет закрыто через 2 секунды');
setTimeout(function(){ newWindow.close(); }, 2000);

Третий аргумент window.open получает строку аргументов. Обычно используются следующие:

  • width, height - задают размеры окна;
  • left, top - задают положение окна на экране;
  • location, menubar, toolbar, status, titlebar, scrollbars - эти параметры выводят/скрывают свои соответствующие "панели" на окне. Задайте yes, чтобы вывести соответствующую "панель";
  • resizable - если задан как yes, то размер окна можно изменять.

Полное описание window.open можно увидеть в документации Mozilla.

Так как мы открываем пустое окно, то первый аргумент будет пустым. Для открытия страницы 'test.html' вызов выглядел бы следующим образом: window.open ('test.html', 'TestWindow', 'width=200,height=200').

В этом примере для объекта window, открываемого окна, задается переменная newWindow. В связи с этим для вывода содержимого в окне необходимо использовать newWindow.document.write.

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

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Елена Сапегова
Елена Сапегова

После прохождения теоретической части пришло письмо об окончании теоретической части курса, будет ли практическая часть?

Рустам Рахимов
Рустам Рахимов

Пол часа искал в интеренете, как что работает. Такое чувство что автор пишет для людей которые уже знают js, или просто хвастается своими знаниями. Конструкция формы непонятна. И можно было бы в кратце написать, что такое событие которое используют. Сорершенно не понятно как работает форма, и как брать из нее значение. 

function Complete() {

    var x = "Имя: " + document.tutform.firstname.value;

alert(x);

} - Так брать значение из формы tutform, firstname-получаем значение из имени. 

<INPUT TYPE="button" VALUE="Готово" onClick="Complete();"> - Нужно к кнопке прописать событие, при нажатие на кнопку готово, чтобы возвращалось значение с помощью функции. А так ничего не работает, и смысла учить нету, если не знать почему не работает.