在javascript中维护特定的窗口层次结构

在javascript中维护特定的窗口层次结构,javascript,window.open,Javascript,Window.open,因此,我正在编写一些javascript来处理多个窗口,我需要一种方法来强制执行以下层次结构:主窗口应该是所有其他打开的窗口的父窗口,而不管这些其他窗口是从哪里打开的。即,如果主窗口使用window.open()打开子窗口,而子窗口使用window.open()打开窗口,则这两个子窗口需要是主窗口的同级和子窗口,当前一个子窗口是另一个子窗口的父窗口,这会导致问题。在调用window.open()之前,是否有方法引用父窗口,以便将父窗口设置为新窗口的父窗口,而不是从中调用javascript函数的

因此,我正在编写一些javascript来处理多个窗口,我需要一种方法来强制执行以下层次结构:主窗口应该是所有其他打开的窗口的父窗口,而不管这些其他窗口是从哪里打开的。即,如果主窗口使用window.open()打开子窗口,而子窗口使用window.open()打开窗口,则这两个子窗口需要是主窗口的同级和子窗口,当前一个子窗口是另一个子窗口的父窗口,这会导致问题。在调用window.open()之前,是否有方法引用父窗口,以便将父窗口设置为新窗口的父窗口,而不是从中调用javascript函数的窗口

我尝试了这一点,但没有成功,但可能很接近:

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

如果有人有任何想法,我们将不胜感激。请注意,此代码段不能直接使用window.open(),但必须调用最终以window.open()结尾的其他函数。

找到了修复方法。我需要跟踪函数调用到实际的window.open,并添加一些逻辑来检测我是否在子对象中,如果在子对象中,则调用window.opener.open()。不确定为什么它不能在调用堆栈的早期更改上下文,但它可以工作:)

您的方法有什么问题?有错误吗?我不完全确定会发生什么-当我在这些行上方放置一个调试器并单步执行它时,我在第二行点击F11(单步执行函数调用),什么也没有发生。它完全跳过函数调用,并且没有打开任何窗口。