Разница между window.parent и window.opener JavaScript вызывает метод главного окна
1: window.parent — это пример страницы iframe, вызывающей объект родительской страницы:
а.html
HTML-код<html>
<head><title>Родительская страница</title></head>
<тело>
<form name="form1" id="form1">
<input type="text" name="username" id="username"/>
</форма>
<iframe src="b.html" width=100%></iframe>
</тело>
</html>
Если нам нужно присвоить значение текстовому полю имени пользователя в a.htm в b.htm, как и во многих функциях загрузки, страница функции загрузки находится в Ifrmae. После успешной загрузки мы помещаем загруженный путь в текстовое поле.
HTML-код
родительской страницы должен быть написан в формате b.html.
<тип сценария="текст/javascript">
вар _parentWin = window.parent;
_parentWin.form1.username.value = "xxxx" ;
</скрипт>
Адрес экземпляра: http://www.cnspry.cn/blog/attachments/window.parent instance/a.html.
Исходный код:
1.a.html
HTML-код
<html>
<голова>
<title>Главная страница</title>
<скрипт>
/** Добавлены тестовые переменные для проверки дочернего окна IFrame, вызывающего глобальные переменные родительского окна*/
var ParentVairous = "Тестовая переменная, добавленная для проверки дочернего окна IFrame, вызывающая глобальную переменную родительского окна";
функция родительскийInvokeIFrame()
{
var iframeTest = document.frames["iframeTest"] // Также можно использовать document.getElementById("iframeTest");
оповещение(iframeTest.document.body.innerHTML);
оповещение (iframeTest.iFrameVair);
}
</скрипт>
</голова>
<тело>
<form name="form1" id="form1">
<input type="text" name="username" id="username"/>
<input type = "button" value = "Родительское окно вызывает содержимое дочернего окна IFrame" onclick = 'parentInvokeIFrame()'/>
</форма>
<iframe src="b.html" width = '100%' id = 'iframeTest'></iframe>
</тело>
</html>
1.b.html
HTML-код
<html>
<голова>
<title></title>
<тип сценария="текст/javascript">
/** Глобальная функция дочернего окна добавлена для проверки родительской формы, вызывающей глобальную функцию дочерней формы IFrame*/
var iFrameVair = "Проверьте родительскую форму на вызов глобальной функции дочерней формы IFrame";
функцияUpdateParent()
{
вар _parentWin = window.parent;
_parentWin.form1.username.value = "xxxx" ;
}
функция childInvokeParent()
{
вар родительскийVairous = window.parent.window.parentVairous;
оповещение (родительскийVairous);
}
</скрипт>
</голова>
<тело>
<form name="form1" id="form1">
<p> </p>
<p выравнивание="центр">
<тип ввода = "кнопка"
имя = "кнопка"
идентификатор = "кнопка"
value = «Обновить содержимое имени пользователя на главной странице»
onclick = "ОбновитьРодитель()">
<тип ввода = "кнопка"
имя = "кнопка2"
идентификатор = "кнопка2"
value = "Проверьте дочернее окно IFrame на вызов глобальной переменной родительского окна"
onclick = "childInvokeParent();"/>
</p>
<p> </p>
</форма>
</тело>
</html>
ps: его нельзя получить между доменами. Например, если источником iframe является «http://www.xxx.ccc/», его невозможно получить.
2: window.opener — это дочерняя страница, открываемая window.open, которая вызывает адрес экземпляра объекта родительской страницы: http://www.cnspry.cn/blog/attachments/window.opener instance/a.html
Исходный код:
2.a.html
HTML-код
<html>
<голова>
<title>Главная страница</title>
<тип сценария="текст/javascript">
/** Добавлены тестовые переменные для проверки дочернего окна IFrame, вызывающего глобальные переменные родительского окна*/
var ParentVairous = "Тестовая переменная, добавленная для проверки дочернего окна IFrame, вызывающая глобальную переменную родительского окна";
/**
* Поскольку он отличается от IFrame (у IFrame есть идентификатор, у window.open() есть другие режимы, чем у родительско-дочернего окна IFrame),
* Поэтому, когда новое окно открывается с помощью метода window.open(), должен существовать объект нового окна.
* Конечно, подокно должно появиться первым, прежде чем можно будет вызвать переменные в подокне, иначе будет выдано исключение.
*/
варOpenWindow;
функция openSubWin()
{
OpenWindow = window.open('b.html', 'newwindow', 'height=1024, width=1300, top=0, left=0, панель инструментов=нет, полоса меню=да, полосы прокрутки=да, изменяемый размер=да, местоположение =нет, статус=нет');
}
функция родительскийInvokeChild()
{
if(OpenWindow)//Конечно, подокно должно появиться первым, прежде чем можно будет вызвать переменные в подокне, иначе будет выдано исключение
{
предупреждение (OpenWindow.iFrameVair);
}
}
</скрипт>
</голова>
<тело>
<form name="form1" id="form1">
<input type="text" name="username" id="username"/>
<input type="button" value="Всплывающая подстраница" onclick = "openSubWin()">
<input type="button" value="Проверить вызов глобальных переменных во всплывающем окне" onclick = "parentInvokeChild()">
</форма>
</тело>
</html>
2.b.html
HTML-код
<html>
<голова>
<title>Подстраница</title>
<тип сценария="текст/javascript">
/** Глобальная функция дочернего окна добавлена для проверки родительской формы, вызывающей глобальную функцию дочерней формы IFrame*/
var iFrameVair = "Проверьте родительскую форму на вызов глобальной функции дочерней формы IFrame";
функцияUpdateParent()
{
вар _parentWin = window.opener;
_parentWin.form1.username.value = "xxxx" ;
}
функция childInvokeParent()
{
вар родительскийVairous = window.opener.window.parentVairous;
оповещение (родительскийVairous);
}
</скрипт>
</голова>
<тело>
<form name="form1" id="form1">
<p> </p>
<p выравнивание="центр">
<тип ввода="кнопка"
onclick = "ОбновитьРодитель();"
имя="кнопка"
идентификатор = «кнопка»
value="Обновить содержимое имени пользователя на главной странице">
<тип ввода = "кнопка"
имя = "кнопка2"
идентификатор = "кнопка2"
value = "Проверьте дочернее окно IFrame на вызов глобальной переменной родительского окна"
onclick = "childInvokeParent();"/>
</p>
<p> </p>
</форма>
</тело>
После напоминания hanjs очень важно отметить, что дочернее окно модального окна не может изменять какое-либо содержимое на странице родительского окна.
Например, измените: OpenWindow = window.open('b.html', 'newwindow', 'height=1024, width=1300, top=0, left=0, панель инструментов=нет, полоса меню=да, полосы прокрутки=да, изменяемый размер = да, местоположение = нет, статус = нет');
Для: OpenWindow = window.showModalDialog("b.html",'newwindow',"dialogHeight:100px,center:yes,resizable:no,status:no");
Когда вы захотите изменить содержимое родительского окна в дочернем окне, появится сообщение о том, что «XX» является пустым или не является объектом, а «XX» — это содержимое родительского окна, которое вы хотите изменить.