java 父窗口关闭_javascrpt控制父窗口关闭,子窗口也关闭(转)

这段代码实现了一个JavaScript功能,当父窗口关闭时,其所有子窗口也会随之关闭。通过`window.closeSub()`函数可以关闭所有子窗口和当前窗口,而`window.openSub()`则用于打开新的子窗口。代码还包含了窗口对象管理和关闭的多个辅助函数,确保窗口的正确关闭和目录树结构的完整。
摘要由CSDN通过智能技术生成

var__winRoot__=top||parent||window;//祖先窗口对象var__winParent__=__winRoot__;//父窗口对象(默认为祖先窗口)var__winTree__={subWinNames:''};//本窗口的子窗口对象集合。 subWinNames 记录所有子窗口的名称,方便遍历//--------------------------------------------------------window.closeSub=function()

{

__winTree_closeAllSubWins__();//关闭所有子窗口__winTree_closeWin__();//关闭当前窗口}

window.openSub=function(url, wname, property)

{

__winTree_openSubWin__(url, wname, property);

}

window.οnbefοreunlοad=function()

{varn=window.event.screenX-window.screenLeft;varb=n>document.documentElement.scrollWidth-20;if(b&&window.event.clientY<0||window.event.altKey)

{

window.closeSub();

}

}//--------------------------------------------------------

//一些函数//

--------------------------------------------------------//指定窗口是否存在//--------------------------------------------------------function__winTree_isExistWin__(hdl){try{varret=hdl&&!hdl.closed}catch(e){varret=false};returnret;}//--------------------------------------------------------

//窗口控制//

--------------------------------------------------------//构造窗口缺省名字//--------------------------------------------------------function__winTree_getDefaultWinName__()

{return"__wn"+(newDate().getTime())+"__";//用当前时间构造窗口缺省名字}//--------------------------------------------------------//打开子窗口,并添加到窗口目录树//--------------------------------------------------------function__winTree_openSubWin__(url, wname, property)

{varhdl=window.open(url, wname, property);

__winTree_addSubWin__(wname, hdl);//保存到子窗口对象集合}//--------------------------------------------------------//保存到子窗口对象集合//--------------------------------------------------------function__winTree_addSubWin__(subWinName, sWin)

{varwin=top?top : window;//获取本窗口的最上层窗口varwinTree=win.__winTree__;

winTree[subWinName]=sWin;//将子窗口对象加入到集合中winTree["subWinNames"]+=subWinName+",";//所有子窗口名称集合}//--------------------------------------------------------//将指定窗口的子孙窗口对象,添加到指定窗口的父窗口中//--------------------------------------------------------//使指定窗口的子孙窗口保持在目录树中的结构//否则指定窗口的子孙窗口将从目录树结构中断开,不能统一控制。//(用于关闭指定窗口的操作时)//--------------------------------------------------------function__winTree_addSubWins2pWin__(thisWin)

{

thisWin=thisWin||window;//缺省为本窗口varpWin=thisWin.__winParent__;varwinTree=thisWin.__winTree__;vararrSubWinNames=winTree.subWinNames.split(",");//子窗口名字数组varintSubWinNamesLen=arrSubWinNames.length;for(vari=0; i

{varsubWinName=arrSubWinNames[i];//指定窗口的子孙窗口名字if(!subWinName)continue;varsWin=winTree[subWinName];//指定窗口的子孙窗口对象//为避免和父窗口中已有的子窗口的名称相同,因此要加上缺省的、以当前时间来构造的名称pWin.__winTree_addSubWin__(subWinName+__winTree_getDefaultWinName__(), sWin);

}

}//--------------------------------------------------------//本窗口的所有下级子窗口执行指定动作//--------------------------------------------------------//funcName                    要执行的函数名称(例如 close ,即 window.close() ,或者其他自己定义的函数,例如 changeBgColor 等等)//argVals                    要执行的函数的参数值//--------------------------------------------------------function__winTree_doWithSubs__(win, funcName, argVals)

{if(!win||!funcName)return;varwinTree=win.__winTree__;vararrSubWinNames=winTree.subWinNames.split(",");//子窗口名字数组varintSubWinNamesLen=arrSubWinNames.length;for(vari=0; i

{varsubWinName=arrSubWinNames[i];//子窗口名字if(!subWinName)continue;varsWin=winTree[subWinName];//子窗口对象if(__winTree_isExistWin__(sWin))

{

sWin.__winTree_doWithSubs__(sWin, funcName, argVals);//查找该子窗口的下级子窗口sWin[funcName](argVals);//执行指定的动作}

}

}//--------------------------------------------------------//初始化窗口目录树//--------------------------------------------------------function__winTree_init__()

{if(__winTree_isExistWin__(opener))//如果存在父窗口{varpWin=opener.top;//父窗口。有可能是在 iframe 中打开本窗体,因此父窗体应该是 opener 的顶级窗体__winParent__=pWin;//祖先窗口__winRoot__=pWin;varppWin=pWin.opener;if(__winTree_isExistWin__(ppWin))//修正祖先窗口{

__winRoot__=pWin.__winRoot__;

}

}//alert([__winRoot__.document.title, __winParent__.document.title, window.document.title]); // for test only}//--------------------------------------------------------//关闭当前窗口//--------------------------------------------------------function__winTree_closeWin__(win)

{

win=win||window;//缺省为关闭当前窗口varpWin=win.__winParent__;if(__winTree_isExistWin__(pWin))//如果指定窗口有父窗口,且未关闭{

__winTree_addSubWins2pWin__(win);//将指定窗口的子孙窗口对象,添加到指定窗口的父窗口中}

win.opener=null;//此语句用于取消“是否关闭此窗口”的提示win.close();//关闭指定窗口pWin.focus();//聚焦到父窗口}//--------------------------------------------------------//关闭本窗口的所有下级子窗口//--------------------------------------------------------function__winTree_closeAllSubWins__(win)

{

win=win||window;//缺省为关闭当前窗口__winTree_doWithSubs__(win,"close");

}//--------------------------------------------------------//初始化//--------------------------------------------------------__winTree_init__();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值