Erro: propriedade window.closed retorna valores incorretos

Traduções deste artigo Traduções deste artigo
ID do artigo: 241109 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sintomas

A propriedade window.closed é usada quando uma janela pai abre uma janela filho usando uma chamada window.open e o pai ou filho precisa saber quando a janela filho ou pai, respectivamente, foi fechada.

A propriedade opener refere-se para a janela aberta atual (usando a chamada do método window.open ). Quando a janela filho verifica a propriedade opener.closed , é false quando o pai é aberto e true caso contrário, isto é, o valor retornado é invertido.

Quando o pai verifica o status da janela filho usando propriedade fechada da janela filho, os mesmos resultados incorretos são retornados.

Resolução

A solução alternativa para o filho é ter o pai definir uma variável na janela filho que mantém o status correto da janela pai. O filho, em seguida, usa essa variável em vez da propriedade opener.closed .

A solução alternativa para o pai é negar propriedade fechada da janela filho. Ele é mais seguro e recomendado para usar a mesma lógica como para a janela filho para garantir que a lógica não quebrar quando esse comportamento é corrigido em uma versão posterior do Internet Explorer

O código HTML a seguir demonstra o bug e também como solucionar o problema.
  1. Salve o arquivo seguinte como Parent.htm:
    <html>
    <head>
    <script>
    var childWin;
    var childOpen = false;
    </script>
    </head>
    <body BGCOLOR="white">
    <input type="button" value="Open Child" id="button1" name="button1" onclick="OpenChild()" >
    <p>
    <input type="button" value="Is Child Open(Bug)?" id="button2" name="button2" onclick="alert(childWin.closed)">
    <p>
    <input type="button" value="Is Child Open(Fix)?" id="button3" name="button3" onclick="alert(childOpen)">
    <script>
    function OpenChild()
    {
    	childWin = window.open ("Child.htm")
    	childOpen = true;
    }
    function UpdateChild()
    {
    	//Only if child window is still open, set the parentOpen property
    	if (childOpen == true)
    	{
    		childWin.parentOpen = false
    	}
    }
    window.onunload = UpdateChild;
    </script>
    </body>
    </html>
    					
  2. Salve o arquivo seguinte como child.htm:
    <html>
    <head>
    <script>
    var parentOpen = true
    </script>
    </head>
    <body BGCOLOR="white">
    <input type="button" value="Is Parent Open(Bug)?" id="button1" name="button1" onclick="alert(window.opener.closed)">
    <input type="button" value="Is Parent Open?" id="button2" name="button2" onclick="alert(parentOpen)">
    
    <script>
    window.onunload = UpdateParent;
    function UpdateParent()
    {
    	//Only if the parent is open, update the status of the child window
    	if (parentOpen)
    	{
    		window.opener.childOpen = false;
    	}
    }
    </script>
    </body>
    </html>
    					
  3. Navegue até Parent.htm e clique no botão Abrir filho para abrir a janela filho.
  4. Clique nos botões É filho abrir antes e depois fechar a janela filho para reproduzir o bug e testar a correção. Como alternativa, clique nos botões É pai abrir antes e depois fechar a janela pai para teste.

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Referências

Para obter mais informações sobre como desenvolver soluções baseadas na Web para o Microsoft Internet Explorer, visite os seguintes sites:
http://msdn.microsoft.com/ie/

http://support.microsoft.com/iep
(c) 1999 Microsoft Corporation, todos os direitos reservados. Contribuições de Kusuma Vellanki, Microsoft Corporation.

Propriedades

ID do artigo: 241109 - Última revisão: quinta-feira, 11 de maio de 2006 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer 4.0 Edição de 128 Bits
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer (Programming) 6.0
Palavras-chave: 
kbmt kbbug kbdhtml kbdocfix kbfaq kbpending KB241109 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 241109
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com