A diferença entre window.parent e window.opener JavaScript chama o método da janela principal
1: window.parent é um exemplo de página iframe chamando o objeto da página pai:
a.html
Código HTML<html>
<head><title>Página pai</title></head>
<corpo>
<nome do formulário="form1" id="form1">
<input type="text" name="nome de usuário" id="nome de usuário"/>
</form>
<iframe src="b.html" width=100%></iframe>
</body>
</html>
Se precisarmos atribuir um valor à caixa de texto do nome de usuário em a.htm em b.htm, assim como muitas funções de upload, a página da função de upload está em Ifrmae. Após o upload ser bem-sucedido, colocamos o caminho do upload na caixa de texto. da página pai deve ser escrito em
b.html
.
<script type="texto/javascript">
var _parentWin = janela.parent;
_parentWin.form1.username.value = "xxxx";
</script>
Endereço da instância: http://www.cnspry.cn/blog/attachments/window.parent instance/a.html
Código fonte:
1.a.html
Código HTML
<html>
<cabeça>
<title>Página principal</title>
<roteiro>
/** Variáveis de teste adicionadas para testar a janela filho do IFrame chamando as variáveis globais da janela pai*/
var parentVairous = "Uma variável de teste adicionada para testar a janela filho do IFrame chamando a variável global da janela pai";
função parentInvokeIFrame()
{
var iframeTest = document.frames["iframeTest"]; //Usar document.getElementById("iframeTest");
alerta(iframeTest.document.body.innerHTML);
alerta(iframeTest.iFrameVair);
}
</script>
</head>
<corpo>
<nome do formulário="form1" id="form1">
<input type="text" name="nome de usuário" id="nome de usuário"/>
<input type = "button" value = "A janela pai chama o conteúdo da janela filho do IFrame" onclick = 'parentInvokeIFrame()'/>
</form>
<iframe src="b.html" largura = '100%' id = 'iframeTest'></iframe>
</body>
</html>
1.b.html
Código HTML
<html>
<cabeça>
<título></título>
<script type="texto/javascript">
/** A função global da janela filho adicionada para testar o formulário pai chamando a função global do formulário filho IFrame*/
var iFrameVair = "Teste o formulário pai para chamar a função global do formulário filho IFrame";
funçãoUpdateParent()
{
var _parentWin = janela.parent;
_parentWin.form1.username.value = "xxxx";
}
função childInvokeParent()
{
var parentVairous = window.parent.window.parentVairous;
alerta(paiVairous);
}
</script>
</head>
<corpo>
<nome do formulário="form1" id="form1">
<p> </p>
<p alinhar="centro">
<tipo de entrada = "botão"
nome = "botão"
id = "botão"
value = "Atualizar o conteúdo do UserName da página principal"
onclick = "UpdateParent()">
<tipo de entrada = "botão"
nome = "botão2"
id = "botão2"
value = "Teste a janela filho do IFrame para chamar a variável global da janela pai"
onclick = "childInvokeParent();"/>
</p>
<p> </p>
</form>
</body>
</html>
ps: Não pode ser obtido entre domínios. Por exemplo, se o src do iframe for 'http://www.xxx.ccc/', não poderá ser obtido.
2: window.opener é a página filha aberta por window.open que chama o endereço da instância do objeto da página pai: http://www.cnspry.cn/blog/attachments/window.opener instance/a.html
Código fonte:
2.a.html
Código HTML
<html>
<cabeça>
<title>Página principal</title>
<script type="texto/javascript">
/** Variáveis de teste adicionadas para testar a janela filho do IFrame chamando as variáveis globais da janela pai*/
var parentVairous = "Uma variável de teste adicionada para testar a janela filho do IFrame chamando a variável global da janela pai";
/**
* Porque é diferente do IFrame (IFrame tem um id, window.open() tem modos diferentes da janela pai-filho do IFrame),
* Portanto, quando uma nova janela é aberta através do método window.open(), deve haver um objeto da nova janela
* Claro, a subjanela deve aparecer primeiro antes que as variáveis na subjanela possam ser chamadas, caso contrário uma exceção será lançada
*/
varOpenWindow;
função openSubWin()
{
OpenWindow = window.open('b.html', 'newwindow', 'height=1024, width=1300, top=0, left=0, barra de ferramentas=no, menubar=yes, scrollbars=yes,resizable=yes,location =não, status=não');
}
função parentInvokeChild()
{
if(OpenWindow)//Claro que a subjanela deve aparecer primeiro antes que as variáveis na subjanela possam ser chamadas, caso contrário uma exceção será lançada
{
alerta(OpenWindow.iFrameVair);
}
}
</script>
</head>
<corpo>
<nome do formulário="form1" id="form1">
<input type="text" name="nome de usuário" id="nome de usuário"/>
<input type="button" value="Subpágina pop-up" onclick = "openSubWin()">
<input type="button" value="Testar variáveis globais de chamada em janela pop-up" onclick = "parentInvokeChild()">
</form>
</body>
</html>
2.b.html
Código HTML
<html>
<cabeça>
<title>Subpágina</title>
<script type="texto/javascript">
/** A função global da janela filho adicionada para testar o formulário pai chamando a função global do formulário filho IFrame*/
var iFrameVair = "Teste o formulário pai para chamar a função global do formulário filho IFrame";
funçãoUpdateParent()
{
var _parentWin = janela.opener;
_parentWin.form1.username.value = "xxxx";
}
função childInvokeParent()
{
var parentVairous = window.opener.window.parentVairous;
alerta(paiVairous);
}
</script>
</head>
<corpo>
<nome do formulário="form1" id="form1">
<p> </p>
<p alinhar="centro">
<tipo de entrada = "botão"
onclick = "UpdateParent();"
nome = "botão"
id="botão"
value="Atualizar o conteúdo do UserName da página principal">
<tipo de entrada = "botão"
nome = "botão2"
id = "botão2"
value = "Teste a janela filho do IFrame para chamar a variável global da janela pai"
onclick = "childInvokeParent();"/>
</p>
<p> </p>
</form>
</body>
Depois de ser lembrado por hanjs, é muito importante observar que a janela filho da janela modal não pode modificar nenhum conteúdo da página da janela pai.
Por exemplo, modifique: OpenWindow = window.open('b.html', 'newwindow', 'height=1024, width=1300, top=0, left=0, Toolbar=no, menubar=yes, scrollbars=yes, redimensionável= sim,localização=não, status=não');
Para: OpenWindow = window.showModalDialog("b.html",'newwindow',"dialogHeight:100px,center:yes,resizable:no,status:no");
Quando você deseja modificar o conteúdo da janela pai na janela filho, aparecerá um erro informando que "XX" está vazio ou não é um objeto, e "XX" aqui é o conteúdo da janela pai que você deseja modificar.