关闭儿童窗户

时间:2011-01-28 13:43:49

标签: javascript

在我们的应用程序中,我们有一个父窗口A,然后有窗口B从窗口A中产生,然后窗口C从窗口B中产生,然后窗口C中的其他几个窗口产生,当我从窗口注销时A,只有窗口B关闭,它不会关闭窗口C及其子窗口

当前使用的脚本如下所示。

 function Close(frm) {
    var win;
    if(window.opener)
    {
    win = window
    }else if(window.parent.WinObjectArray)
    {
    win = window
    }
    else
    {
    win = window.parent;
    }
    if(!win.parent.WinObjectArray)
    win = win.parent;

    if(frm=='logout')

    {
    if(window.WinObjectArray !=null && window.WinObjectArray!=undefined)
    {
       for(i=win.parent.WinObjectArray.length-1;i>=0;i--)

           {
                if(!win.parent.WinObjectArray[i].closed) 
                 win.parent.WinObjectArray[i].close();
            }
          return ;
    }
    }
    var closeWinArray = new Array();
    closeWinArray[0] = window;
    if(window.WinObjectArray !=null && window.WinObjectArray!=undefined)
    {
        for(i=0;i<win.parent.WinObjectArray.length;i++)
         {
           var openerFnd = false;
             for(j=0;j<closeWinArray.length;j++)
               {
              if(!win.parent.WinObjectArray[i].closed && win.parent.WinObjectArray[i].opener == closeWinArray[j])
                {
                closeWinArray[closeWinArray.length] = win.parent.WinObjectArray[i];
                openerFnd = true;
                }
               else if(win.parent.WinObjectArray[i].closed)
                  {
                    openerFnd = true;
                  }
                 }
    if(openerFnd){
    win.parent.WinObjectArray.splice(i,1);
    i=i-1;
    }
    }
    }
    if(window.WinObjectArray !=null && window.WinObjectArray!=undefined)
    {
    for(i=0;i<win.parent.WinObjectArray.length;i++)
    {
    if(win.parent.WinObjectArray[i] == window)
    {
    win.parent.WinObjectArray.splice(i,1);
    break;
    }
    }
    closeWinArray.splice(0,1);
    for(i=closeWinArray.length-1;i>=0;i--)
    {
    if(!closeWinArray[i].closed) 
    closeWinArray[i].close();
    }
    }
        for (i=0;i<WindowArray.length;i++){
        if (! WindowArray[i].closed) {
        WindowArray[i].close();
        }
    }
}

2 个答案:

答案 0 :(得分:2)

只有窗口A成为所有窗口产生的标志。很容易调用父级为子进程/窗口编写一个新窗口。因此,如果您将所有窗口函数路由到父级和从父级路由,您将不再遇到此问题。父[A]将拥有此设置下所有子窗口的权限和完全控制权。

答案 1 :(得分:0)

我认为Window A无权修改Window C和C的子窗口。

尝试以下方法: 为onClose()事件创建一个Javascript。将它附加到Window B.在该方法中关闭B的子节点.B的子节点具有相同类型的onUnload()或onClose()侦听器并关闭由它们创建的窗口。