La diferencia entre window.parent y window.opener JavaScript llama al método de la ventana principal
1: window.parent es un ejemplo de la página iframe que llama al objeto de la página principal:
a.html
código HTML<html>
<head><title>Página principal</title></head>
<cuerpo>
<nombre del formulario="form1" id="form1">
<tipo de entrada="texto" nombre="nombre de usuario" id="nombre de usuario"/>
</formulario>
<iframe src="b.html" ancho=100%></iframe>
</cuerpo>
</html>
Si necesitamos asignar un valor al cuadro de texto del nombre de usuario en a.htm en b.htm, al igual que muchas funciones de carga, la página de la función de carga está en Ifrmae. Después de que la carga sea exitosa, colocamos la ruta cargada en el cuadro de texto. de la página principal.
El código HTML
debe escribirse en b.html.
<tipo de script="texto/javascript">
var _parentWin = ventana.parent;
_parentWin.form1.username.value = "xxxx";
</script>
Dirección de instancia: http://www.cnspry.cn/blog/attachments/window.parentstance/a.html
Código fuente:
1.a.html
código HTML
<html>
<cabeza>
<título>Página principal</título>
<guión>
/** Se agregaron variables de prueba para probar la ventana secundaria IFrame llamando a las variables globales de la ventana principal*/
var parentVairous = "Se agregó una variable de prueba para probar la ventana secundaria IFrame que llama a la variable global de la ventana principal";
función parentInvokeIFrame()
{
var iframeTest = document.frames["iframeTest"] // También se puede utilizar document.getElementById("iframeTest");
alerta(iframeTest.document.body.innerHTML);
alerta(iframeTest.iFrameVair);
}
</script>
</cabeza>
<cuerpo>
<nombre del formulario="form1" id="form1">
<tipo de entrada="texto" nombre="nombre de usuario" id="nombre de usuario"/>
<input type = "button" value = "La ventana principal llama al contenido en la ventana secundaria IFrame" onclick = 'parentInvokeIFrame()'/>
</formulario>
<iframe src="b.html" ancho = '100%' id = 'iframeTest'></iframe>
</cuerpo>
</html>
1.b.html
código HTML
<html>
<cabeza>
<título></título>
<tipo de script="texto/javascript">
/** La función global de la ventana secundaria se agregó para probar el formulario principal llamando a la función global del formulario secundario IFrame*/
var iFrameVair = "Pruebe el formulario principal para llamar a la función global del formulario secundario IFrame";
funciónActualizarPadre()
{
var _parentWin = ventana.parent;
_parentWin.form1.username.value = "xxxx";
}
función niñoInvokeParent()
{
var parentVairous = ventana.parent.window.parentVairous;
alerta(padreVairous);
}
</script>
</cabeza>
<cuerpo>
<nombre del formulario="form1" id="form1">
<p> </p>
<p align="centro">
<tipo de entrada = "botón"
nombre = "botón"
identificación = "botón"
value = "Actualizar el contenido del nombre de usuario de la página principal"
onclick = "ActualizarPadre()">
<tipo de entrada = "botón"
nombre = "botón2"
identificación = "botón2"
value = "Pruebe la ventana secundaria IFrame para llamar a la variable global de la ventana principal"
onclick = "childInvokeParent();"/>
</p>
<p> </p>
</formulario>
</cuerpo>
</html>
ps: no se puede obtener entre dominios. Por ejemplo, si el src del iframe es 'http://www.xxx.ccc/', no se puede obtener.
2: window.opener es la página secundaria abierta por window.open que llama a la dirección de instancia del objeto de la página principal: http://www.cnspry.cn/blog/attachments/window.openerstance/a.html
Código fuente:
2.a.html
código HTML
<html>
<cabeza>
<título>Página principal</título>
<tipo de script="texto/javascript">
/** Se agregaron variables de prueba para probar la ventana secundaria IFrame llamando a las variables globales de la ventana principal*/
var parentVairous = "Se agregó una variable de prueba para probar la ventana secundaria IFrame que llama a la variable global de la ventana principal";
/**
* Debido a que es diferente de IFrame (IFrame tiene una identificación, window.open() tiene modos diferentes a los de la ventana padre-hijo de IFrame),
* Entonces, cuando se abre una nueva ventana a través del método window.open(), debe haber un objeto de la nueva ventana
* Por supuesto, la subventana debe aparecer primero antes de poder llamar a las variables en la subventana; de lo contrario, se generará una excepción.
*/
varOpenWindow;
función openSubWin()
{
OpenWindow = window.open('b.html', 'newwindow', 'alto=1024, ancho=1300, arriba=0, izquierda=0, barra de herramientas=no, barra de menú=sí, barras de desplazamiento=sí,resizable=yes,ubicación =no, estado=no');
}
función padreInvokeChild()
{
if(OpenWindow) // Por supuesto, la subventana debe aparecer primero antes de poder llamar a las variables en la subventana; de lo contrario, se generará una excepción.
{
alerta (OpenWindow.iFrameVair);
}
}
</script>
</cabeza>
<cuerpo>
<nombre del formulario="form1" id="form1">
<tipo de entrada="texto" nombre="nombre de usuario" id="nombre de usuario"/>
<tipo de entrada="botón" valor="Subpágina emergente" onclick = "openSubWin()">
<input type="button" value="Probar variables globales de llamada en ventana emergente" onclick = "parentInvokeChild()">
</formulario>
</cuerpo>
</html>
2.b.html
código HTML
<html>
<cabeza>
<título>Subpágina</título>
<tipo de script="texto/javascript">
/** La función global de la ventana secundaria se agregó para probar el formulario principal llamando a la función global del formulario secundario IFrame*/
var iFrameVair = "Pruebe el formulario principal para llamar a la función global del formulario secundario IFrame";
funciónActualizarPadre()
{
var _parentWin = ventana.opener;
_parentWin.form1.username.value = "xxxx";
}
función niñoInvokeParent()
{
var parentVairous = ventana.opener.window.parentVairous;
alerta(padreVairous);
}
</script>
</cabeza>
<cuerpo>
<nombre del formulario="form1" id="form1">
<p> </p>
<p align="centro">
<tipo de entrada="botón"
onclick = "ActualizarParent();"
nombre="botón"
id="botón"
value="Actualizar el contenido del nombre de usuario de la página principal">
<tipo de entrada = "botón"
nombre = "botón2"
identificación = "botón2"
value = "Pruebe la ventana secundaria IFrame para llamar a la variable global de la ventana principal"
onclick = "childInvokeParent();"/>
</p>
<p> </p>
</formulario>
</cuerpo>
Después de que hanjs lo recuerde, es muy importante tener en cuenta que la ventana secundaria de la ventana modal no puede modificar ningún contenido en la página de la ventana principal.
Por ejemplo, modifique: OpenWindow = window.open('b.html', 'newwindow', 'height=1024, width=1300, top=0, left=0, toolbar=no, menubar=yes, scrollbars=yes, redimensionable= sí,ubicación=no, estado=no');
Para: OpenWindow = window.showModalDialog("b.html",'newwindow',"dialogHeight:100px,center:yes,resizable:no,status:no");
Cuando desee modificar el contenido de la ventana principal en la ventana secundaria, aparecerá un error que indica que "XX" está vacío o no es un objeto, y "XX" aquí es el contenido de la ventana principal que desea modificar.