JavaScript. Подробное руководство, 6-е издание, стр. 194

HTML-документы могут содержать вложенные документы, используя для этого элементы

<b>&lt;iframe&gt;.</b>
Элемент
<b>&lt;iframe&gt;</b>
создает вложенный контекст просмотра, представленный отдельным объектом
<b>Window</b>
. Устаревшие и не рекомендуемые к использованию элементы
<b>&lt;frameset&gt;</b>
и
<b>&lt;frame&gt;</b>
также создают вложенные контексты просмотра, и каждый элемент
<b>&lt;frame&gt;</b>
представлен собственным объектом
<b>Window</b>
. Различия между окнами, вкладками, плавающими фреймами (элемент
<b>&lt;iframe&gt;</b>
) и фреймами в клиентском JavaScript весьма несущественны: все они являются отдельными контекстами просмотра и в сценариях все они представлены объектами
<b>Window</b>
. Вложенные контексты просмотра не изолированы друг от друга, как обычно бывают изолированы независимые вкладки. Сценарий, выполняющийся в одном фрейме, всегда имеет доступ к вмещающим и вложенным фреймам, и только политика общего происхождения может не позволять сценарию просматривать документы в этих фреймах. Вложенные фреймы рассматриваются в разделе 14.8.2.

Поскольку в клиентском JavaScript объект Window является глобальным объектом, каждое окно или фрейм имеет отдельный контекст выполнения сценариев на языке JavaScript. Однако сценарий JavaScript, выполняющийся в одном окне, может, с учетом ограничений политики общего происхождения, использовать объекты, свойства и методы, объявленные в другом окне. Более подробно эта тема обсуждается в разделе 14.8.3. На тот случай, когда политика общего происхождения не позволяет сценариям в двух отдельных окнах взаимодействовать друг с другом напрямую, стандарт HTML5 предусматривает прикладной интерфейс передачи сообщений, основанный на механизме событий, который обеспечивает возможность косвенного взаимодействия. Подробнее эта возможность рассматривается в разделе 22.3.

14.8.1. Открытие и закрытие окон

Открыть новое окно веб-броузера (или вкладку, что обычно зависит от настроек броузера) можно с помощью метода

<b>open()</b>
объекта Window. Метод
<b>Window.ореn()</b>
загружает документ по указанному URL-адресу в новое или в существующее окно и возвращает объект
<b>Window</b>
, представляющий это окно. Он принимает четыре необязательных аргумента:

Первый аргумент

<b>ореn()</b>
- это URL-адрес документа, отображаемого в новом окне. Если этот аргумент отсутствует (либо является пустой строкой), будет открыт специальный URL пустой страницы about:blank.

Второй аргумент

<b>ореn()</b>
- это строка с именем окна. Если окно с указанным именем уже существует (и сценарию разрешено просматривать содержимое этого окна), используется это существующее окно. Иначе создается новое окно и ему присваивается указанное имя. Если этот аргумент опущен, будет использовано специальное имя "_blank", т. е. будет открыто новое неименованное окно.

Обратите внимание, что сценарии не могут просто так указывать имена окон и не могут получать контроль над окнами, используемыми другими веб-приложения-ми: они могут указывать имена только тех существующих окон, которыми им «разрешено управлять» (термин взят из спецификации HTML5). Проще говоря, сценарий может указать имя существующего окна, только если это окно содержит документ, происходящий из того же источника, или если это окно было открыто самим сценарием (или рекурсивно открытым окном, которое открыло это окно). Кроме того, если одно окно является фреймом, вложенным в другое окно, сценарии в любом из них получают возможность управлять другим окном. В этом случае можно использовать зарезервированные имена «_top» (для обозначения вмещающего окна верхнего уровня) и «_parent» (для обозначения ближайшего вмещающего окна).

Имена окон

Имя окна играет важную роль, потому что оно позволяет указать существующее окно в вызове метода

<b>open()</b>
, а также потому, что оно может использоваться как значение HTML-атрибута
<b>target</b>
элементов
<b>&lt;а&gt;</b>
и
<b>&lt;form&gt;,</b>
ссылающихся на документ (или результат обработки формы), который должен быть отображен в именованном окне. Атрибуту
<b>target</b>
этих элементов можно также присвоить значение «_blank», «_parent» или «_top», чтобы открыть документ в новом пустом окне, родительском окне или фрейме или в окне верхнего уровня.

Имя окна, если оно имеется, хранится в свойстве

<b>name</b>
объекта
<b>Window</b>
. Данное свойство доступно для записи, и сценарии могут изменять его по мере необходимости. Если методу
<b>Window.open()</b>
передать имя (отличное от «_blank»), окно, созданное вызовом этого метода, получит указанное имя, как начальное значение свойства
<b>name</b>
. Если элемент
<b>&lt;iframe&gt;</b>
имеет атрибут
<b>name</b>
, объект
<b>Window</b>
, представляющий этот фрейм, будет использовать значение атрибута
<b>name</b>
как начальное значение свойства
<b>name</b>
.

************************************

Третий необязательный аргумент

<b>ореn()</b>
- это список параметров, определяющих размер и видимые элементы графического пользовательского интерфейса нового окна. Если опустить этот аргумент, окно получает размер по умолчанию и полный набор графических элементов: строку меню, строку состояния, панель инструментов и т.д. В броузерах, поддерживающих вкладки, это обычно приводит к созданию новой вкладки. Указав этот аргумент, можно явно определить размер окна и набор имеющихся в нем элементов управления. (Если явно указать размер, в большинстве случаев это приведет к созданию нового окна, а не вкладки.) Например, маленькое окно с изменяемым размером, имеющее строку состояния, но не содержащее меню, панели инструментов и адресную строку, можно открыть посредством следующим образом:

<b>var w = window.open(&quot;smallwin.html&quot;, &quot;smallwin&quot;,</b>

<b>&quot;width=400,height=350,status=yes,resizable=yes&quot;);</b>

Этот третий аргумент является нестандартным, и спецификация HTML5 требует, чтобы броузеры игнорировали его. Подробнее о том, какие параметры можно указывать в этом аргументе, рассказывается в описании метода

<b>Window.open()</b>
в четвертой части книги. Обратите внимание, что, когда указывается третий аргумент, любые не заданные явно элементы управления отсутствуют. По ряду причин, связанных с проблемами безопасности, броузеры накладывают ограничения на характеристики, которые можно передать методу. Так, например, невозможно открыть слишком маленькое окно или открыть его за пределами видимой области экрана; кроме того, некоторые броузеры не допускают возможности создания окон без строки состояния.