Browser Object Model

В сценариях JavaScript браузер веб-разработчику предоставляет множество "готовых" объектов, с помощью которых он может взаимодействовать с элементами веб-страницы и самим браузером. В совокупности все эти объекты составляют объектную модель браузера (BOM - Browser Object Model).

BOM(Browser Object Model - Объектная Модель Браузера) - это специальная древовидная структура, обеспечивает доступ к окну браузера и позволяет манипулировать им и его элементами.

BOM представляет объекты, через свойства и методы которых можно управлять внешним видом и поведением браузера. Обеспечивает доступ к фреймам, запросы к серверу, функции alert/confirm/prompt. Большинство возможностей BOM стандартизированы в HTML5, но браузеры могут и добавляют свои возможности.

Из-за длительного отсутствия спецификации производители браузеров свободно расширяли BOM по своему усмотрению. Многие элементы, схожие в разных браузерах, стали стандартами де-факто, которые соблюдаются и по сей день из соображений совместимости. Чтобы стандартизировать эти фундаментальные аспекты JavaScript, консорциум W3C определил основные BOM-элементы в спецификации HTML5.

На самом верху модели BOM находится глобальный объект window.

Объект window является корневым объектом JavaScript. Все объекты JavaScript, а также переменные и функции определяемые пользователем хранятся в объекте window.
Структура BOM

Он(объект window) представляет собой одно из окон или вкладку браузера с его панелями инструментов, меню, строкой состояния, HTML страницей и другими объектами. Доступ к этим различным объектам окна браузера осуществляется с помощью следующих основных объектов: navigator, history, location, screen, document. Так как данные объекты являются дочерними по отношению к объекту window, то обращение к ним происходит как к свойствам объекта window.

window

window – самый главный объект в браузере, который отвечает за одно из окон (вкладок) браузера. Он является корнем иерархии всех объектов доступных веб-разработчику в сценариях JavaScript. Объект window кроме глобальных объектов (navigator, history, location, screen, document и др.) имеет собственные свойства и методы, которые предназначены для:

Если в браузере открыть несколько вкладок (окон), то браузером будет создано столько объектов window, сколько открыто этих вкладок (окон). Т.е. каждый раз открывая вкладку (окно), браузер создаёт новый объект window связанный с этой вкладкой (окном).

Методы: open(), close(), print(), focus() и blur().

Методы глобального объекта window предназначенные для открытия, закрытия, печати окная, передачи и удаления фокуса на окно.

window.open()

Создает и открывает новое окно.

	var windowObjectReference = window.open(strUrl, strWindowName, [strWindowFeatures]);
				

В первом параметре указывается URL страницы, которую необходимо загрузить в это окно. Если значение данного параметра не задавать, то в окне будет отображена пустая страница (about:blank).

Во втором параметре указывается значение атрибута target или имя окна. Поддерживаются следующие значения:

Третий параметр предназначен для указания набора свойств окна, которые вводятся через запятую. Поддерживаются следующие основные свойства окна:

Метод open() позволяет не только открыть окно, но и получить ссылку на данное окно. Данная ссылка позволяет взаимодействовать с этим окном посредством вызова определённых свойств и методов. Т.е. мы можем с помощью JavaScript кода, расположенного в одном окне управлять другим окном.

window.close()

Он предназначен для закрытия окна. Данный метод не имеет параметров. Он обычно используется для закрытия окон созданных методом open().

codepen.io ограничивает работу некоторых методов объекта window, по этому закрыть окно не получиться, но сам код рабочий.Пример 1

window.print()

Данный метод печатает содержимое текущего окна. Не имеет параметров.

window.focus()

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

window.blur()

Метод предназначен, чтобы убрать фокус с указанного окна, т.е. перемещает его на задний план. Данный метод не имеет параметров.

Свойства объекта window: name, opener, closed

window.name

Данное свойство очень часто используется для изменения внутреннего имени окна, после того как оно уже открыто. Кроме этого, свойство name может вернуть текущее значение внутреннего имени окна.

Внутреннее имя окна, это не строка, заключённая между открывающим и закрывающим тегом <title> - это имя окна которое предназначено для разработчика. Т.е. данное имя невидимо для пользователя.

Данное имя в основном используется в гиперссылках и формах для указания окна, в котором необходимо открыть страницу. Например, для указания внутреннего имя окна в гиперссылке используется атрибут target. Если элемент <а> имеет атрибут target="searchWindow", то при нажатии на данную ссылку браузер сначала пытается найти окно с таким внутренним именем (searchWindow), если окна с таким внутренним именем не существует, то он открывает новое окно и присваивает ему имя searchWindow. А если окно с таким именем существует, то новое окно не открывается, а перезагружается страница по указанной ссылке <а> этом окне. По умолчанию окна <а> браузере не имеют внутреннего имени.

window.opener

Данное свойство позволяет получить в окне, ссылку на исходное окно, т.е. на окно из которого было открыто данное окно.

Получение свойства window.opener

window.closed

Свойство closed возвращает логическое значение, указывающее закрыто окно или нет.

    if (win.closed)
        alert ("Окно закрыто"); 
    else
        alert ("Окно открыто");
				

Методы для перемещения окна

В JavaScript для перемещения окна доступны метод moveTo() и moveBy()

window.moveTo()

Метод предназначен для перемещения левого верхнего угла окна в указанную точку экрана.

	window.moveTo(x, y);
				
Метод window.moveTo(x, y)

Параметры

window.moveBy()

Метод предназначен для перемещения окна на указанное количество пикселей относительно его текущего положения.

Метод window.moveBy(x, y)

Параметры

Методы для изменения размеров окна

В JavaScript для изменения размеров окна предназначен метод resizeTo() и метод resizeBy().

Эти методы изменяют размеры окна посредством перемещения правого нижнего угла окна браузера, при этом верхний левый угол окна не перемещается (он остаётся в своих прежних координатах).

window.resizeTo()

Метод изменяет размер окна до указанной ширины и высоты.

	window.resizeTo(width, height);
				

Параметры

window.resizeBy()

Метод изменяет размер окна на указаную величину величину.

	window.resizeBy(xDelta, yDelta);
				

Параметры

Методы, предназначенные для прокрутки документа внутри окна

В JavaScript для прокрутки HTML документа доступны методы scrollTo() и scrollBy().

window.scrollTo()

Метод предназначен для прокрутки документа в горизонтальном и вертикальном направлении до указанного количества пикселей.

	window.scrollTo(x-coord, y-coord);
				

Параметры

window.scrollBy()

Метод предназначен для прокрутки документа в горизонтальном и вертикальном направлении на указанное количество пикселей.

	window.scrollBy(x, y);
				

Параметры

Свойства innerWidth, outerWidth и др.

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

window.innerWidth и window.innerHeight

Данные свойства предназначены для получения размеров видимой рабочей области окна браузера. Т.е. свойства innerWidth и innerHeight предназначены для получения значений ширины и высоты области, в которой отображается HTML-документ. Эти свойства доступны только для чтения и возвращают значения в пикселях.

Свойства объкта window хранящие размеры окна и его положение

window.outerWidth и window.outerHeight

Свойства предназначены для получения размеров всего окна браузера, т.е. включая панели инструментов, полосы прокрутки, строку состояния, границы окна и т.д. Свойства outerWidth и outerHeight доступны только для чтения и возвращают соответственно ширину и высоту окна в пикселях.

window.screenLeft (screenX) и window.screenTop (screenY)

Свойства предназначены для получения координаты левого верхнего угла окна браузера или документа относительно левого верхнего угла экрана пользователя.

При этом свойства screenLeft и screenTop работают в Internet Explorer, а свойства screenX и screenY в Mozilia Firefox. В браузерах Chrome, Safari и других подобных браузерах можно использовать как свойства screenLeft и screenTop, так и свойства screenX и screenY.

При использовании данных свойств необходимо учитывать тот факт, что некоторые браузеры могут возвращать координату левого верхнего угла документа, а некоторые браузеры координату левого верхнего угла окна. Свойства screenleft(screenX) и screenTop(screenY) доступны только для чтения и возвращают соответственно значения расстояний относительно левого угла экрана по горизонтали и вертикали в пикселях.

window.pageXOffset (scrollX) и window.pageYOffset (scrollX)

Они предназначены для получения количества пикселей, на которые документ был прокручен в горизонтальном pageXOffset или вертикальном pageYOffset направлении относительного левого верхнего угла окна. Свойства scrollX и scrollY эквиваленты соответственно свойствам pageXOffset и pageYOffset. Эти свойства доступны только для чтения.

Пример 2. Свойства окна

location

location - объект, который отвечает за адресную строку текущего документа, с которым он связан. Данный объект содержит свойства и методы, которые позволяют: получить текущий адрес страницы браузера, перейти по указанному URL, перезагрузить страницу и т.п.

Доступ к данному объекту осуществляется как к свойству объекта window, т.е. через точку.

    var loc = window.location;
			

Свойства объекта location

Пример разбора адресной строки
  1. location.protocol - http:
  2. location.hostname - itchief.ru
  3. location.pathname - /search
  4. location.search - ?q=bootstrap
  5. location.hash - #part2
Примечание: Изменение URL или какой либо её части с помощью свойств объекта location приводит к немедленному переходу к этому URL в текущем окне, или в том окне или вкладке браузера, для которого этот объект был вызван.

Методы объекта location

Пример 3. Загрузка и замена документов

navigator

navigator - информационный объект, являющийся свойством объекта window, доступным во всех браузерах, с помощью которого можно получить общую информацию о браузере.

Браузер содержит информацию следующего характера:

Вероятно самый распространенный способ использования объекта navigator - получение информации о браузере.

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

Свойства объекта navigator

history

history – объект, который позволяет получить историю переходов пользователя по ссылкам в пределах одного окна (вкладки) браузера. Так как он является свойством объекта window, то у каждой вкладки в браузере будет свой объект window и свой объект history.

Данный объект отвечает за браузерные кнопки Вперёд и Назад. Объект history не предоставляет возможности читать историю посещений. Можно отправить посетителя назад или вперед, но сами адреса браузер не даёт из соображений безопасности.

С помощью методов объекта history можно имитировать нажатие на эти кнопки, а также переходить на определённое количество ссылок в истории вперёд или назад. Кроме этого, с появлением HTML5 History API веб-разработчику стали доступны методы для добавления и изменения записей в истории, а также событие, с помощью которого можно обрабатывать нажатие кнопок forward (вперёд) и back (назад).

Свойства и методы объекта history

screen

screen – объект, который предоставляет информацию об экране пользователя: разрешение экрана, максимальную ширину и высоту, которую может иметь окно браузера, глубина цвета и т.д.

Объект screen(который также является свойством объекта window) один из немногих JavaScript объектов, которые практически не используются в коде. Он просто предоставляет сведения о графических параметрах клиентской системы вне окна браузера. Доступность тех или иных свойств объекта screen зависит от браузера.

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

Свойства width и height объекта screen

Свойства screen.width и screen.height возвращают соответственно ширину и высоту экрана пользователя в пикселях.

Свойства availWidth и availHeight объекта screen

Свойства screen.availWidth и screen.availHeight возвращают ширину и высоту, которое может занять окно браузера. Например, в операционной системе Windows свойство screen.availHeight равно разнице между высотой экрана и высотой "Панели задач".