2011-03-22 62 views
1

所以我寫了一些JavaScript來處理多個窗口,我需要一種方法來強制執行以下層次結構:主窗口應該是所有其他窗口的父窗口,而不管其他窗口在哪裏打開。即。如果主窗口使用window.open()打開一個子窗口,並且子窗口使用window.open()打開一個窗口,則這兩個子窗口必須是主窗口的兄弟和子窗口,當前一個孩子是另一個孩子的父窗口這是造成問題的原因。有什麼辦法在調用window.open()之前引用父窗口,以便將父窗口設置爲新窗口的父窗口,而不是調用javascript函數的窗口?在JavaScript中維護一個特定的窗口層次結構

我想這沒有成功,但它可能會接近:

if (window.opener && !window.opener.closed) { 
    window.opener.functionThatEventuallyOpensAWindow(); 
} else { 
    functionThatEventuallyOpensAWindow(); 
} 

如果任何人有這將不勝感激任何想法。請注意,此代碼段不能直接使用window.open(),但必須調用最終以window.open()結尾的其他函數。

+0

您的方法有什麼問題?任何錯誤? – Thorben 2011-03-22 14:01:11

+0

我不完全確定會發生什麼 - 當我將一個調試器放在這些行的上方並進入它時,我在第二行打F11(進入函數調用),並且沒有任何反應。它完全跳過函數調用,並且沒有窗口打開。 – jbabey 2011-03-22 14:43:23

回答

0

找到了修復程序。我需要按照函數調用實際的window.open並添加一些邏輯來檢測我是否在一個孩子,如果我是,調用window.opener.open()來代替。不確定爲什麼它不能在調用堆棧的早期階段更改上下文,但它的工作原理:)

相關問題