Em JavaScript, quando usar window.opener
/ window.parent
/ window.top
?
Respostas:
window.opener
refere-se à janela que chamou window.open( ... )
para abrir a janela da qual é chamadowindow.parent
refere-se ao pai de uma janela em um <frame>
ou<iframe>
window.top
refere-se a-topo mais a janela a partir de uma janela aninhado em uma ou mais camadas de <iframe>
sub-janelasEsses serão null
(ou talvez undefined
) quando não forem relevantes para a situação da janela de referência. ("Janela de referência" significa a janela em cujo contexto o código JavaScript é executado.)
window.open()
ao enviar a página. Agora, esta janela-filha abre outra janela-filha com o mesmo window.open()
self de fechamento. Agora, quando eu enviar meu segundo filho (o primeiro filho não existe mais), gostaria de acessar os elementos da página da minha página principal. Isso é possível a partir do segundo filho, quando o primeiro não está mais presente?
window.opener.opener
antes que a página intermediária vá embora.
Acho que você precisa adicionar algum contexto à sua pergunta. No entanto, informações básicas sobre essas coisas podem ser encontradas aqui:
window.opener
https://developer.mozilla.org/en-US/docs/Web/API/Window.opener
Usei window.opener principalmente ao abrir uma nova janela que funcionava como um diálogo que exigia a entrada do usuário e precisava passar informações de volta para a janela principal. No entanto, isso é restrito pela política de origem, então você precisa garantir que o conteúdo da caixa de diálogo e a janela do abridor sejam carregados da mesma origem.
window.parent
https://developer.mozilla.org/en-US/docs/Web/API/Window.parent
Usei isso principalmente ao trabalhar com IFrames que precisam se comunicar com o objeto de janela que os contém.
window.top
https://developer.mozilla.org/en-US/docs/Web/API/Window.top
Isso é útil para garantir que você esteja interagindo com a janela do navegador de nível superior. Você pode usá-lo para impedir que outro site crie iframe para seu site, entre outras coisas.
Se você adicionar mais detalhes à sua pergunta, posso fornecer outros exemplos mais relevantes.
ATUALIZAÇÃO:
Existem algumas maneiras de lidar com sua situação.
Você tem a seguinte estrutura:
Quando o Dialog 1 executa o código para abrir o Dialog 2, depois de criar o Dialog 2, faça com que o diálogo 1 defina uma propriedade no Dialog 2 que faz referência ao abridor Dialog1.
Portanto, se "childwindow" é sua variável para o objeto de janela de diálogo 2, e "janela" é a variável para o objeto de janela de diálogo 1. Depois de abrir a caixa de diálogo 2, mas antes de fechar a caixa de diálogo 1, faça uma atribuição semelhante a esta:
childwindow.appMainWindow = window.opener
Depois de fazer a atribuição acima, feche a caixa de diálogo 1. A partir do código em execução na caixa de diálogo 2, você deve ser capaz de usar
window.appMainWindow
para fazer referência à janela principal, objeto de janela.
Espero que isto ajude.
window.open()
ao enviar a página. Agora, esta janela-filha abre outra janela-filha com o mesmo window.open()
self de fechamento. Agora, quando eu enviar meu segundo filho (o primeiro filho não existe mais), gostaria de acessar os elementos da página da minha página principal. Isso é possível a partir do segundo filho, quando o primeiro não está mais presente?
top, parent, opener (bem como window, self e iframe) são todos objetos de janela.
window.opener
-> retorna a janela que abre ou lança a janela pop-up atual.window.top
-> retorna a janela superior, se você estiver usando frames, esta é a janela do frameset, se não estiver usando frames, é o mesmo que window ou self.window.parent
-> retorna o quadro pai do quadro ou iframe atual. O quadro pai pode ser a janela do conjunto de quadros ou outro quadro, se houver quadros aninhados. Se não estiver usando frames, o pai é o mesmo que a janela atual ou selfquando você está lidando com pop-ups, window.opener desempenha um papel importante, porque temos que lidar com campos da página pai e também da página filha, quando temos que usar valores na página pai podemos usar window.opener ou queremos alguns dados na janela filha ou janela pop-up no momento do carregamento, então, novamente, podemos definir os valores usando window.opener