在Javascript中处理子窗口和孙窗口

时间:2008-10-27 15:12:09

标签: javascript jquery window

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

现在,如果我的用户在窗口#3之前关闭窗口#2,我就会遇到这样的问题:窗口#3不再可以在其window.opener中调用函数,因为它已经消失了。

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

我试过这样做我在窗口#2(顺便使用jquery):

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

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

但是当窗口#2在窗口#3之前关闭时,windows#3的window.opener仍未指向窗口#1。

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

5 个答案:

答案 0 :(得分: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 !-";

答案 1 :(得分:1)

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

parent = window.opener.opener

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

答案 2 :(得分:0)

这可能是切向的,但为什么你需要打开3个独立的窗户?你可以使用jQuery对话框吗?当应用程序打开我的窗口时,我感到非常沮丧。

答案 3 :(得分:0)

window.opener可能是只读的。我设置了你自己的财产,以便在装载孙子时引用祖父母。

function onLoad() {
  window.grandparent = window.opener.opener;
}

答案 4 :(得分:0)

var main_window = get_main_window();
function get_main_window(){
    var w = window;
    while(w.opener !== null){
        w = w.opener;
    }
    return w;
}