2011-03-22 68 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()来代替。不确定为什么它不能在调用堆栈的早期阶段更改上下文,但它的工作原理:)

相关问题