Erro: à propriedade window.closed devolve valores incorrectos

Traduções de Artigos Traduções de Artigos
Artigo: 241109 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sintomas

à propriedade window.closed é utilizada quando uma janela principal abre uma janela subordinada utilizando uma chamada window.open e principal ou subordinado necessita de saber quando a janela subordinado ou ascendente, respectivamente, ter sido fechada.

A propriedade de utilizador refere-se para a janela aberta actual (utilizando a chamada ao método window.open ). Quando a janela descendente verifica a propriedade opener.closed , é false quando o principal é aberto e true caso contrário; ou seja, o valor devolvido é invertido.

Quando o principal verifica o estado da janela descendente utilizando propriedade fechado a janela descendente, são devolvidos os mesmos resultados incorrectos.

Resolução

A solução do subordinado é o principal definir uma variável na janela subordinado que mantém o estado correcto da janela principal. A criança utiliza, em seguida, esta variável em vez da propriedade opener.closed .

A solução para o ascendente é negar propriedade fechada a janela descendente. É mais seguro e recomendado para utilizar a mesma lógica como para a janela descendente para garantir que a lógica não divide quando este comportamento foi corrigido numa versão posterior do Internet Explorer

O código HTML a seguir demonstra o erro e também como contornar o problema.
  1. Guarde o ficheiro 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. Guarde o ficheiro 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 para Parent.htm e clique no botão Abrir subordinado para abrir a janela descendente.
  4. Clique nos botões É subordinado abrir antes e depois de fechar a janela descendente para reproduzir o erro e testar a correcção. Em alternativa, clique nos botões É principal abrir antes e depois de fechar a janela principal para testar.

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos do Microsoft listados na secçã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 Web sites da Microsoft:
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

Artigo: 241109 - Última revisão: 11 de maio de 2006 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 241109
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

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