Объект window. Создание оконОбъект window является объектом верхнего уровня в который загружается
документ, являющийся дочерним объектом, именно поэтому из дочернего
объекта мы не можем воздействовать на свойства и методы родительского
окна. Это в случае, если объект document не создает новое окно. Если
посредством программы JavaScript создается новое окно из объекта document,
- новое окно становится уже дочерним объектом от document, следовательно
мы уже можем им управлять. И документ, загруженный в новое окно также
является потомком от объекта document окна верхнего уровня, следовательно
из документа, загруженного в новое окно мы тоже можем управлять этим
окном. Тоесть, окно, созданное из объекта document является потомком
этого объекта и на него мы можем воздействовать. В виду того, что в
любом случае существует основное родительское окно которое можно просто
закрыть, тем самым лишить потомков родителя и тогда основным становится
первое созданное окно, а если все созданы из одного документа, то о
наследственности вообще речи быть не может - они станут разрозненны,
следовательно массив windows - не существует
и не может таковой существовать. Окнам можно задавать только имена и
получать доступ только через имя. При исчезновении родителя исчезает
и имя - окно становится "сиротой" - это предотвращает обращения к несуществующим
объектам window. К чему я это тут распинаюсь? Часто задают вопросы:
какими средствами JavaScript можно закрыть какое-либо окно, созданное
другой программой? Ответ - нет таких средств. Нужно просто кликнуть
на "крестик" в правом углу окна или воспользоваться меню. Не получается?
- тогда Alt+F4 или комбинация из трех пальцев: Ctrl+Alt+Del - шютка
:)
По умолчанию атрибутам всегда присваивается значение yes, а размер нового окна (если он не задан) соответствует размеру предыдущего. Атрибуты можно указывать в произвольном порядке. В следующем примере создается новое окно размером 200х100 пикселов. Внимание, в программе нет проверки существования окна, не нажимайте кнопку "Закрыть окно" если окно еще не создано - это приведет к ошибке. Проверить существование окна можно, но об этом скажем позже. В загружаемом документе также существует кнопка закрытия окна, которая использует для объекта window псевдоним self:
Вот пример этой программы: <script language="JavaScript"> <!-- function opWind() { var myUrl = "exewin.htm"; myWin=window.open(myUrl, "wind1", "width=200,height=100,resizable=no,scrollbars=no,menubar=no"); } --> </script> <input type="button" value="Открыть окно" onClick="opWind()"> <input type="button" value="Закрыть окно" onClick="myWin.close()"> Мы видим, что управлять порожденным окном можно как из родительского окна, так и из документа внутри созданного окна. А вот что в документе загружаемом в новое окно: <HTML> <HEAD> <TITLE>Пример для нового окна</TITLE> </HEAD> <BODY><CENTER> <FONT COLOR="#FF0000" SIZE="+2">Это вновь созданное окно.</FONT> <input type="button" value="Закрыть окно" onClick="self.close()"> </CENTER> </BODY> </HTML> Здесь myUrl - адрес ресурса, который загружается в новое
окно, в данном случае это exewin.htm, что позволяет
при необходимости изменять эту строковую переменную и загружать различные
ресурсы. Если бы строка "width=200,height=100,resizable=no,scrollbars=no,menubar=no"
была бы пропущена, то новое окно унаследовало бы все характеристики
родительского окна. Строку свойств окна можно задать также и в строковую
переменную, а затем подставлять уже переменную, это даст возможность
динамически управлять свойствами порожденного окна: Различия между фреймами и окнами Для объекта window в языке JavaScript
существует ряд синонимов, использование которых зависит от структуры
HTML-документа. Кроме того, отдельное окно является новым окном браузера
с собственными значениями свойств window, top и self и, может содержать
другие объекты, например фреймы. Не путайте автономные окна с объектами
window - это разные вещи. Метод open() Для управления окнами и их содержимым
необходимо запоминать ссылки на новые окна, создаваемые при помощи метода
open(). Для этого в JavaScript-программах используются переменные, которые
в последствии могут записываться как префиксы других JavaScript-выражений,
обращающихся к определенным окнам, например выражения document.write()
и т.п. Так с помощью одного оператора в языке JavaScript можно создать
новое окно и запомнить ссылку на него в переменной например: Динамическое изменение объектов в окне С помощью программы, загруженной
в родительское окно, можно динамически изменять объекты в порожденных
окнах, записывая текст в HTML-формате в объект document нужного дочернего
окна. Внимание, не нажимайте кнопку "Сменить значение"
пока не создано окно <script language="JavaScript"> <!-- var win1 function newWin() { win1 = window.open("", "myWindow", "toolbar=0,width=300,height=100"); win1.document.open(); win1.document.writeln("<title>Пример окна</title><body bgcolor='#C0C0C0'>"+ "<form><input type='text' size=20 value='Текущее значение' name='aname'></form>"); win1.document.writeln("Нажмите кнопку в основном окне "+ "чтобы сменить значение пол\я"); win1.focus(); } function renWin() { win1.document.forms[0].aname.value='Новое значение'; win1.focus(); } //--> </script> <form name="myForm"> <input type = "button" onClick="newWin()" value="Открыть окно"> <input type = "button" onClick= renWin() value="Сменить значение поля"> </form> Обратите внимание, что имя порожденного
окна win1 указывается как префикс при обращении к объекту document,
причем она создана глобальной, в результате чего методы open(), writeln(),
focus() применяются к этому окну из любой функции в текущем документе.
Аналогично смены значения поля в форме можно динамически изменять и
другие объекты окна, например картинки, только уже использовать нужно
массив images, также можно изменять и текстовое содержимое не перезагружая
документ полностью, например используя контейнеры <DIV> . . .
</DIV>. Управление окнами. Свойство openerЗадача управления фокусом ввода усложняется тем, что для обращения к переменным и функциям, определенным в родительском окне браузера, нельзя использовать синоним родительского окна top, как при работе с фреймами. В случае, если окна открывались при помощи метода open(), значение top является ссылкой на текущее окно, потому что в этом случае окна браузера автономны. Иными словами, мы не можем обратиться к функциям документа в родительском окне и изменять там значения каких-либо переменных. Но разработчики предусмотрели такое, вероятно сами с проблемой столкнулись, а проблема надо сказать серьезная (была :-)) и быстренько придумали метод opener. Свойство opener содержит имя (или хотите, ссылку так, как одновременно несколько окон не могут породить одно окно) окна, которое вызвало метод open(), и необходимо для обращения к функциям и переменным, определенным в первом окне браузера. Рассмотрим пример программы, которая предоставляет возможность открыть окно и установить в нем фокус ввода. Данная программа использует свойство opener для обращения к первому окну браузера. Вот текст программы <script language="JavaScript"> <!-- var winToggle = false; var wt; function changeBut(n) { if (n==0) { winToggle = false; document.forms[0].elements[0].value = "Открыть окно"; } else { winToggle = true; wt = window.open("win1.htm", "wf", "toolbar=0,width=300,height=100"); document.forms[0].elements[0].value = "Назначить фокус ввода"; } } function togWin() { if ( !winToggle ) changeBut(1); else wt.focus(); } //--> </script> <form> <input type="button" value="Открыть окно" onClick="togWin()"> </form> Файл win1.htm, загружаемый во вновь созданное окно wt, имеет вид: <html> <body bgcolor="#FFFF80"> <form> <input type="button" value="Закрыть окно" onClick="window.opener.changeBut(0); self.close()"> </form> </body> </html> Основной документ содержит кнопку
формы, при нажатии на которую создается новое окно. Значение, возвращаемое
методом open(), присваивается переменной wt, используемой в программе
позже. Переменная winToggle применяется для определения состояния порожденного
окна. (только если вы закрыли окно кнопкой.
Если окно было закрыто кнопкой "Х" в верхнем правом углу - значение
переменной winToggle останется неизменным, нажатие кнопки в основном
окне приведет к ошибке. Как избавиться от такого недоразумения в IE
не представляю, в NN можно например определить переменную в новом окне
и проверять на значение NULL, но IE выдает ошибку при обращении к неопределенному
объекту) При щелчке мыши на кнопке Открыть окно происходит
активизация функции togWin(), которая проверяет значение переменной
winToggle, определяя, открыто новое окно или нет. Если окно открыто,
ему передается фокус ввода, в противном случае создается новое окно.
Переменной winToggle по умолчанию присваивается значение false, поэтому
после загрузки документа нажатие кнопки всегда приводит к открытию нового
окна. При этом текст на кнопке заменяется текстом Назначить фокус
ввода, после чего эта кнопка используется для передачи фокуса ввода,
а не для открытия окна. Переменной winToggle теперь присваивается значение
true, означающее, что окно открыто. [<<Назад] [В начало] |