Кратко о HTML, JavaScript и WWW

       

Фреймы и окна


При работе с фреймами и окнами в предыдущих версиях JavaScript постоянно приходилось отслеживать последовательность открытия окон и фреймов для того, чтобы аккуратно их потом закрывать. На некоторых неточностях работы с окнами были основаны так называемые mail-bombs. Суть этих "подарков" заключалась в том, что если пользователь по почте принимает документ, состоящий только из одной команды:

window.close(),

то система, не спрашивая пользователя, закрывала текущее окно, а в этот момент таким окном является окно электронной почты. Теперь, перед тем как что-либо закрыть, система будет спрашивать разрешения. Правда, если в момент получения команды на закрытие окна на экране имеется только одно окно навигатора, то система его закроет без каких-либо комментариев.

Работа с окнами и фреймами на этом не исчерпывается. В систему введено новое свойство opener, которое определено для текущего окна или фрейма, а методы blur и focus распространены на работу с окнами. Свойство opener определяет окно документа, вызвавшего открытие окна текущего документа. Свойство определено для любого окна и фрейма. Если необходимо выполнить некоторые функции по отношению к окну, открывшему данное окно, то можно использовать выражение типа:

window.opener.[method]

Например, если требуется закрыть окно - предшественник, то можно просто выполнить close:

window.opener.close()

Точно таким же способом можно изменить содержание этого окна при помощи методов write или writeln.

Можно менять и другие свойства объектов в окне - предшественнике. Следующий пример взят из дополнений к спецификации JavaScript:

window.opener.document.bgColor = СcyanТ

В данном случае для окна - предшественника определен светло-голубой цвет в качестве цвета фона.

Но самым замечательным является то, что предшественника можно менять. Это значит, что автор получает возможность открывать и закрывать окна не в строго иерархической последовательности, а в произвольном порядке. Управление многооконным интерфейсом в этом случае становится более гибким:


window.opener = new_window

window.opener = null

Первый пример переназначает окно-предшественник, в то время как второй вообще защищает предшественника от каких-либо действий.

Все что было сказано об окнах распространяется и на фреймы, которые являются просто частным случаем окна. Фрейм часто может быть порожден путем разбиения другого фрейма на части. Если при этом потребуется обратиться к окну фрейма - предшественника, то свойство opener в этом случае незаменимо.

Кроме обращения к различным свойствам окон и фреймов было расширено действие методов blur и focus с фреймов до окон. Теперь не только фрейм, но и окно может быть сделано текущим с использованием метода focus или, наоборот, переведено в фон при помощи метода blur. В ряде случаев, например, при порождении нескольких страниц обращение к этим функциям бывает довольно полезным.


Содержание раздела