今天一位在北京工作的朋友问到我如何在关闭父窗体时自动关闭已打开的子窗体。我首先问了她一下需求。问是不是广告之类。看了后觉得不是,类似于小窗体显示详细信息。
这种情况我首先想到二种方法,
第一种方式:可以使用模态窗口方式打开子窗体,这样用户在关闭子窗体前是无法操作父窗体的。包括关闭父窗体的操作!
第二种方式:使用WEB2.0的方式,DIV层,类似于很多网现在的登录方式。点击后出现一个遮罩层,然后主DIV显示登录窗体。这样用户也在关闭“子页面”时无法操作“父窗体”。可以关闭父窗体,此时当然,登录的DIV“窗体”也随之关闭!
遇到问题,通过在一眼不知如何解答时,我首先会换一种思维方式~显然这上面二种情况都基本可以解决这个问题!
后来看了 一下他们公司的网站,发现页面上打开链接的方式是使用window.open的方式。如果使用a href的方式打开的话。我想是不大容易实现父窗体关闭,子窗体也随之关闭。但既然是使用window.open脚本的方式。实现起来并不难!
如下:
<%
@LANGUAGE="JAVASCRIPT" CODEPAGE="936"
%>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" />
< title > 打开指定URL的窗口/改变链接时候状态栏的文字 </ title >
< script language ="javascript" >
//申明一个代表窗体对象的变量,这是关键,他作为全局变量,后面两个函数都可以访问他
var SunWindows;
function newWindow(url)
{//这里申明一个根据传来的地址打开新窗口的函数
SunWindows=window.open(url,"","width=400,height=300,left=200,top=200");//将打开的窗口对象作为值赋给SunWindows对象
}
function closeWind()
{
//关闭打开的新窗口,否则提示
if(SunWindows)//如果SunWindows对象存在
{
SunWindows.close();//调用关闭方法
SunWindows=null//并把值赋成null
}
else
{
//alert("没有打开的窗口");
}
}
</ script >
</ head >
< body onunload ="closeWind();" >
< p >
< input type ="submit" name ="tijiao" value ="打开fengyan博客" onclick ="newWindow('http://eflylab.cnblogs.com')" />
打开博客后,关闭本窗体。打开的子窗体会自动关闭
</ p >
< p >
< input type ="submit" name ="close" value ="直接在本窗体中关闭刚才打开的窗口" onclick ="closeWind()" />
</ p >
< p >< a href ="http://eflylab.cnblogs.com" > http://eflylab.cnblogs.com </ p >
</ body >
</ html >
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" />
< title > 打开指定URL的窗口/改变链接时候状态栏的文字 </ title >
< script language ="javascript" >
//申明一个代表窗体对象的变量,这是关键,他作为全局变量,后面两个函数都可以访问他
var SunWindows;
function newWindow(url)
{//这里申明一个根据传来的地址打开新窗口的函数
SunWindows=window.open(url,"","width=400,height=300,left=200,top=200");//将打开的窗口对象作为值赋给SunWindows对象
}
function closeWind()
{
//关闭打开的新窗口,否则提示
if(SunWindows)//如果SunWindows对象存在
{
SunWindows.close();//调用关闭方法
SunWindows=null//并把值赋成null
}
else
{
//alert("没有打开的窗口");
}
}
</ script >
</ head >
< body onunload ="closeWind();" >
< p >
< input type ="submit" name ="tijiao" value ="打开fengyan博客" onclick ="newWindow('http://eflylab.cnblogs.com')" />
打开博客后,关闭本窗体。打开的子窗体会自动关闭
</ p >
< p >
< input type ="submit" name ="close" value ="直接在本窗体中关闭刚才打开的窗口" onclick ="closeWind()" />
</ p >
< p >< a href ="http://eflylab.cnblogs.com" > http://eflylab.cnblogs.com </ p >
</ body >
</ html >
主要实现方式是 利用了 window.open()方法的返回值。一般情况下很少有人会利用这个值~直接执行打开就完了,而,我们可以定义一个JS的全局变量 SunWindows将window.open的返回值赋给它,这样它“代表”了当前打开的子窗体。然后我们可以直接调用 SunWindows.Close();方法就可以关闭打开的子窗体!因为要使用父窗体关闭时,自动关闭子窗体。所以我将该方法的执行放在了 Body的onUnload()事件中~当页面要离开时执行~这样可以满足朋友的项目需求~