错误: window.closed 属性将返回不正确的值

文章翻译 文章翻译
文章编号: 241109 - 查看本文应用于的产品
展开全部 | 关闭全部

症状

父窗口打开子窗口使用 window.open 呼叫和 $ 父或子需要知道何时的子级还是父级窗口分别,已被关闭时使用 window.closed 属性。

opener 属性是指窗口打开当前的 (使用 window.open 方法调用)。当子窗口检查 opener.closed 属性时,它为 false,当父项已打开,并且 true 否则为 ; 也就是被反转返回值。

当父项检查使用子窗口的关闭属性子窗口的状态时,将返回相同的不正确结果。

解决方案

为子解决方法是让父维护正确的状态的父窗口的子窗口中设置一个变量。子项然后使用此变量,而不是 opener.closed 属性。

父项的解决方法是将否定子窗口的关闭属性。为更安全,建议使用的子窗口的相同的逻辑,以确保在逻辑不会中断时这种行为固定在更高版本的 Internet Explorer 中

下面的 HTML 代码演示该 bug 以及如何解决该问题。
  1. 将以下文件保存为 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. 将以下文件保存为 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. 定位到 Parent.htm,然后单击 打开子 按钮以打开子窗口。
  4. 之前和之后关闭子窗口重现 bug,并测试该修补程序,请单击 是子打开 按钮。或者,单击 是父打开 按钮上之前和之后关闭父窗口的测试。

状态

Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的错误。

参考

有关为 Microsoft Internet Explorer 中开发的基于 Web 的解决方案的详细信息请访问以下 Microsoft 网站:
http://msdn.microsoft.com/ie/

http://support.microsoft.com/iep
(c) Microsoft Corporation 1999,保留的所有权限。由 Kusuma Vellanki,Microsoft 公司的贡献。

属性

文章编号: 241109 - 最后修改: 2006年5月11日 - 修订: 3.0
这篇文章中的信息适用于:
  • 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
关键字:?
kbmt kbbug kbdhtml kbdocfix kbfaq kbpending KB241109 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 241109
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

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