Свойства
<b>parent</b>
и
<b>top</b>
позволяют сценариям ссылаться на родительские окна или фреймы. Существует несколько способов сослаться на дочерние окна или фреймы. Фреймы создаются с помощью элементов
<b><iframe>.</b>
Получить ссылку на объект
<b>Element</b>
, представляющий элемент
<b><iframe>,</b>
можно точно так же, как на объект, представляющий любой другой элемент. Допустим, что документ содержит тег
<b><iframe id="f1">.</b>
Тогда получить ссылку на объект
<b>Element</b>
, представляющий этот элемент
<b>iframe</b>
можно следующим образом:
<b>var iframeElement = document.getElementById("f1");</b>
Элементы
<b><iframe></b>
имеют свойство
<b>contentWindow</b>
, которое ссылается на объект
<b>Window</b>
фрейма, поэтому ссылку на объект
<b>Window</b>
этого фрейма можно получить так:
<b>var childFrame = document.getElementByld("fl").contentWindow;</b>
Имеется возможность пойти обратным путем - от объекта
<b>Window</b>
, представляющего фрейм, к объекту
<b>Element</b>
элемента
<b><iframe>,</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><iframe></b>
.
Если в элементе
<b><iframe></b>
указать атрибут name или
<b>id</b>
, в качестве индекса этого фрейма можно будет использовать не только число, но и имя. Например, ссылку на фрейм с именем «И» можно получить с помощью выражения
<b>frames["f1"]</b>
или
<b>frames.f1</b>
.
В разделе 14.7 говорилось, что имена или идентификаторы элементов
<b><iframe></b>
и других автоматически превращаются в свойства объекта
<b>Window</b>
и что элементы
<b><iframe></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><iframe></b>
можно присвоить имя, которое будет доступно для использования в JavaScript-коде. Однако если использовать атрибут
<b>name</b>
, указанное имя также будет использоваться в качестве значения свойства
<b>name</b>
объекта
<b>Window</b>
, представляющего фрейм. Имя, указанное таким способом, можно использовать в качестве значения атрибута
<b>target</b>
ссылки и передавать методу
<b>window.open()</b>
во втором аргументе.