2

我的网页上有一个主窗口 (#1),我从中打开一个新的浏览器窗口 (#2),从中打开一个新窗口 (#3)。

现在,如果我的用户在 window#3 之前关闭 window#2,我的问题是 window#3 不再可以在其 window.opener 中调用函数,因为它已经消失了。

我想做的是在 window#2 关闭时将 window#3.opener 设置为 window#1。

我尝试在窗口#2 中执行此操作(顺便说一下我使用 jquery):

var children = [];
$(window).unload( function( ) {
    $.each( children, function( p, win ) {
        if ( win ) {
            win.opener = window.opener;
            }
    } );
} );

加载 window#3 时,我将窗口添加到 window#2 的子数组中。

但是当window#2 在window#3 之前关闭时,windows#3 的window.opener 并不指向window#1。

如何确保我的大子窗口(窗口#3)在窗口#2关闭后仍然可以调用主窗口(窗口#1)?

4

5 回答 5

3

在您输入的第三个窗口中:

<script type="text/javascript">
  var grandMother = null;
  window.onload = function(){
    grandMother = window.opener.opener;
  }
</script>

因此,您拥有祖母窗口的句柄,然后您可以直接将其用于任何事情:

if(grandMother)
      grandMother.document.getElementById("myDiv").firstChild.nodeValue ="Greetings from your grandchild !-";
于 2008-10-27T15:23:34.500 回答
1

当第三个打开时,您应该创建对主窗口的引用:

parent = window.opener.opener

这将在第二个窗口关闭后继续存在。

于 2008-10-27T15:27:06.427 回答
0

这可能是切线的,但是为什么需要打开 3 个单独的窗口呢?你可以改用 jQuery 对话框吗?当应用程序在我身上打开窗口时,我感到非常沮丧。

于 2008-10-27T15:17:41.033 回答
0

window.opener可能是只读的。我会设置您自己的属性以在加载孙子时引用祖父母。

function onLoad() {
  window.grandparent = window.opener.opener;
}
于 2008-10-27T15:19:54.290 回答
0
var main_window = get_main_window();
function get_main_window(){
    var w = window;
    while(w.opener !== null){
        w = w.opener;
    }
    return w;
}
于 2016-11-08T15:33:31.837 回答