注意: window.closed 屬性會傳回不正確的值

文章翻譯 文章翻譯
文章編號: 241109 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

徵狀

window.closed 屬性用父視窗會開啟子視窗使用 window.open 呼叫和父代或子需要知道當 [子系] 或 [父] 視窗分別,已關閉時。

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 Corporation 的貢獻。

屬性

文章編號: 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
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:241109
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
依現狀不再更新的知識庫內容免責聲明
本文旨在說明 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