2.7. Фреймы и окна
При работе с фреймами и окнами в предыдущих версиях
JavaScript постоянно приходилось отслеживать последовательность открытия окон и
фреймов, для того, чтобы аккуратно их потом закрывать. На некоторых неточностях
работы с окнами были основаны так называемые mail-bombs. Суть этих
"подарков" заключалась в том, что если пользователь по почте
принимает документ, который состоит только из одной команды:
window.close()
то система не спрашивая пользователя закрывала текущее окно,
а в этот момент таким окном является окно электронной почты. Теперь, перед тем
как что-либо закрыть, система будет спрашивать разрешения. Правда, опять не
всегда. Если в момент получения команды на закрытие окна на экране только одно
окно Navgator, то система его закроет без каких-либо комментариев.
Однако, работа с окнами и фреймами на этом не исчерпывается.
Во-первых, в систему введено новое свойство 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 в этом случае незаменимо. Разработчики языка следуют за
пожеланиями авторов Websit'ов и практикой применения JavaScrip, которая на
начальной стадии разработки языка не была столь очевидной. Кроме обращения к
различным свойствам окон и фреймов разработчики расширили действие методов blur
и focus с фреймов до окон. Теперь не только фрейм, но и окно может быть сделано
текущем с использованием метода focus или, наоборот, переведено в фон при
помощи метода blur. В ряде случаев, при порождении нескольких страниц, например,
обращение к этим функциям бывает довольно полезным.
|