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

Свойства

<b>parent</b>
и
<b>top</b>
позволяют сценариям ссылаться на родительские окна или фреймы. Существует несколько способов сослаться на дочерние окна или фреймы. Фреймы создаются с помощью элементов
<b>&lt;iframe&gt;.</b>
Получить ссылку на объект
<b>Element</b>
, представляющий элемент
<b>&lt;iframe&gt;,</b>
можно точно так же, как на объект, представляющий любой другой элемент. Допустим, что документ содержит тег
<b>&lt;iframe id=&quot;f1&quot;&gt;.</b>
Тогда получить ссылку на объект
<b>Element</b>
, представляющий этот элемент
<b>iframe</b>
можно следующим образом:

<b>var iframeElement = document.getElementById(&quot;f1&quot;);</b>

Элементы

<b>&lt;iframe&gt;</b>
имеют свойство
<b>contentWindow</b>
, которое ссылается на объект
<b>Window</b>
фрейма, поэтому ссылку на объект
<b>Window</b>
этого фрейма можно получить так:

<b>var childFrame = document.getElementByld(&quot;fl&quot;).contentWindow;</b>

Имеется возможность пойти обратным путем - от объекта

<b>Window</b>
, представляющего фрейм, к объекту
<b>Element</b>
элемента
<b>&lt;iframe&gt;,</b>
содержащего фрейм, - с помощью свойства
<b>frameElement</b>
объекта
<b>Window</b>
. Объекты
<b>Window</b>
, представляющие окна верхнего уровня, а не фреймы, имеют значение
<b>null</b>
в свойстве
<b>frameElement</b>
:

<b>var elt = document.getElementByld('fl');</b>

<b>var win = elt.contentWindow;</b>

<b>win.frameElement === elt // Всегда верно для фреймов</b>

<b>window.frameElement === null // Для окон верхнего уровня</b>

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

<b>getElementByld()</b>
и свойство
<b>contentWindow</b>
. Каждый объект
<b>Window</b>
имеет свойство
<b>frames</b>
, хранящее ссылки на дочерние фреймы, содержащиеся в окне или фрейме. Свойство
<b>frames</b>
ссылается на объект, подобный массиву, который может индексироваться числовыми индексами или именами фреймов. Получить ссылку на первый дочерний фрейм в окне можно с помощью выражения
<b>frames[0].</b>
Сослаться на третий дочерний фрейм во втором дочернем фрейме можно с помощью выражения
<b>frames[1].frames[2].</b>
Сценарий, выполняющийся во фрейме, может сослаться на соседний фрейм одного с ним уровня, как
<b>parent.frames[1].</b>
Обратите внимание, что элементами массива
<b>frames[]</b>
являются объекты Window, а не элементы
<b>&lt;iframe&gt;</b>
.

Если в элементе

<b>&lt;iframe&gt;</b>
указать атрибут name или
<b>id</b>
, в качестве индекса этого фрейма можно будет использовать не только число, но и имя. Например, ссылку на фрейм с именем «И» можно получить с помощью выражения
<b>frames[&quot;f1&quot;]</b>
или
<b>frames.f1</b>
.

В разделе 14.7 говорилось, что имена или идентификаторы элементов

<b>&lt;iframe&gt;</b>
и других автоматически превращаются в свойства объекта
<b>Window</b>
и что элементы
<b>&lt;iframe&gt;</b>
интерпретируются иначе, чем другие элементы: в случае с фреймами значениями этих автоматически создаваемых свойств становятся ссылки на объекты
<b>Window</b>
, а не на объекты
<b>Element</b>
. Это означает, что на фрейм с именем "f1" можно сослаться как на свойство
<b>f1</b>
вместо
<b>frames.f1</b>
. В действительности, стандарт HTML5 указывает, что свойство
<b>frames</b>
, подобно свойствам
<b>window</b>
и
<b>self</b>
, ссылается на сам объект
<b>Window</b>
, который действует как массив фреймов. Это означает, что на первый дочерний фрейм можно сослаться, как
<b>window[0],</b>
а получить количество фреймов можно, обратившись к свойству
<b>window.length</b>
или просто
<b>length</b>
. Однако использование свойства
<b>frames</b>
вместо
<b>window</b>
в подобных случаях делает программный код более понятным. Обратите внимание, что не во всех текущих броузерах выполняется условие
<b>frame==window</b>
, но даже в броузерах, где это условие не выполняется, разрешается индексировать дочерние фреймы числами и именами, обращаясь к любому из этих двух объектов.

С помощью атрибута

<b>name</b>
или
<b>id</b>
элементу
<b>&lt;iframe&gt;</b>
можно присвоить имя, которое будет доступно для использования в JavaScript-коде. Однако если использовать атрибут
<b>name</b>
, указанное имя также будет использоваться в качестве значения свойства
<b>name</b>
объекта
<b>Window</b>
, представляющего фрейм. Имя, указанное таким способом, можно использовать в качестве значения атрибута
<b>target</b>
ссылки и передавать методу
<b>window.open()</b>
во втором аргументе.