友
在我们的应用程序中,我们有一个父窗口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();
}
}
}
答案 0 :(得分:2)
只有窗口A成为所有窗口产生的标志。很容易调用父级为子进程/窗口编写一个新窗口。因此,如果您将所有窗口函数路由到父级和从父级路由,您将不再遇到此问题。父[A]将拥有此设置下所有子窗口的权限和完全控制权。
答案 1 :(得分:0)
我认为Window A无权修改Window C和C的子窗口。
尝试以下方法: 为onClose()事件创建一个Javascript。将它附加到Window B.在该方法中关闭B的子节点.B的子节点具有相同类型的onUnload()或onClose()侦听器并关闭由它们创建的窗口。