javascript中能否实现“关闭当前页面则由这个页面通过window.open打开的所有页面也都关闭”的功能?

时间:2022-02-18 23:51:37
如题,我想在ASP.NET(C#)的.aspx里面的js函数中实现这个功能.
PS:“由这个页面通过window.open打开的页面”是在.cs中通过Response.Write打开的,如:
Response.Write("<script language='javascript'>window.open('"+"abc.aspx?" +"id=" + id.ToString()+"')</script>");

12 个解决方案

#1


open有返回的.
一直拿着这个返回.
在关闭是把这个返回也关掉.
var a = window.open();
a.close();

#2


a页面是不能控制b页面的,

#3


可以先用个数组保存打开的窗口.


<!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>无标题文档</title>
<script type="text/javascript">
var wins = [], n = 0;
function newWin(){
wins[n++] = window.open("http://www.baidu.com");
}
function closeWin(){
for(var i=0; i<n; i++){
wins[i].close();
wins[i] = null;
}
n = 0;
window.opener = null;
window.close();
};
/* 窗口关闭前调用
window.onbeforeunload = function(){
closeWin();
};*/
</script>
</head>
<body>
<input type="button" value=" 新建窗口 " onclick="newWin();" />
<input type="button" value=" 关闭 " onclick="closeWin();" />
</body>
</html>

#4


但是现在好像不能很好的区分刷新和关闭事件

#5


引用 3 楼 Free_Wind22 的回复:
可以先用个数组保存打开的窗口.

HTML code<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html; charset=gb2312"/><title>无标题文档</title><scripttype="text/javascript">varwins=[], n=0;functionnewWin(){
    wins[n++]=window.open("http…


我也想到用数组,但是问题是我的页面是在.CS里面用语句打开的,具体的说的一个datagrid里面的模板列中的按钮而不是页面上的某个单独按钮。这个怎么存到html文件的js函数的数组中啊?

#6


顶起~

#7


lz,你可以先找到dataGrid里面模板列的那个按钮,给它附加事件代码,或者在后端用btnOPen.Attributes.add('onclick','OpenWindow()');之类,或者在前端用document.getElementsById('btn在前端的id’).attachEvent('onclick',OpenWindow);之类,看你自己了,最终是要用js数组来保存window的。

#8


引用 7 楼 Mark2Win 的回复:
lz,你可以先找到dataGrid里面模板列的那个按钮,给它附加事件代码,或者在后端用btnOPen.Attributes.add('onclick','OpenWindow()');之类,或者在前端用document.getElementsById('btn在前端的id’).attachEvent('onclick',OpenWindow);之类,看你自己了,最终是要用js数组来保存window的。

最关键的地方是我不知道怎么写在.cs文件中把打开的window的编号还是啥的识别标志传到数组再把数组传到html的js函数里的代码=_=b。。。
哪位写两句代码具体的代码吧。。。

#9


再up。
附加:每次点击datagrid模板列的按钮页面就要刷新一次,在js中定义的变量值也没有了,我要打开几个页面的话,最后实际上只能保存最后打开那个窗口的句柄,怎么办?

#10


那在子页面做个定时方法.
当检测不到window.opener的时候就自己关掉吧...

#11


引用 10 楼 natineprince 的回复:
那在子页面做个定时方法.
当检测不到window.opener的时候就自己关掉吧...

我在从A中用window.open打开的窗口B的HTML中添加了js函数
function test() 

if(window.opener!=null)
{
alert(window.opener);
setTimeout('test()', 1000);  
    }
    else
    {window.close();}

可是就算我关了A,B也没有关,alert(window.opener);仍然返回[object]。是哪里写错了么?

#12


确实写错了。应该是
<script language="javascript">
<!--
window.onload=test();
function test() 

     if(opener)
    {
if(opener.closed==false)
{
     setTimeout('test()', 1000);  
}
else{window.close();}
    }
    else{window.close();}    


 //-->
</script>
natineprince 的方法是目前最好的解决办法了,谢谢大家帮助。

#1


open有返回的.
一直拿着这个返回.
在关闭是把这个返回也关掉.
var a = window.open();
a.close();

#2


a页面是不能控制b页面的,

#3


可以先用个数组保存打开的窗口.


<!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>无标题文档</title>
<script type="text/javascript">
var wins = [], n = 0;
function newWin(){
wins[n++] = window.open("http://www.baidu.com");
}
function closeWin(){
for(var i=0; i<n; i++){
wins[i].close();
wins[i] = null;
}
n = 0;
window.opener = null;
window.close();
};
/* 窗口关闭前调用
window.onbeforeunload = function(){
closeWin();
};*/
</script>
</head>
<body>
<input type="button" value=" 新建窗口 " onclick="newWin();" />
<input type="button" value=" 关闭 " onclick="closeWin();" />
</body>
</html>

#4


但是现在好像不能很好的区分刷新和关闭事件

#5


引用 3 楼 Free_Wind22 的回复:
可以先用个数组保存打开的窗口.

HTML code<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html; charset=gb2312"/><title>无标题文档</title><scripttype="text/javascript">varwins=[], n=0;functionnewWin(){
    wins[n++]=window.open("http…


我也想到用数组,但是问题是我的页面是在.CS里面用语句打开的,具体的说的一个datagrid里面的模板列中的按钮而不是页面上的某个单独按钮。这个怎么存到html文件的js函数的数组中啊?

#6


顶起~

#7


lz,你可以先找到dataGrid里面模板列的那个按钮,给它附加事件代码,或者在后端用btnOPen.Attributes.add('onclick','OpenWindow()');之类,或者在前端用document.getElementsById('btn在前端的id’).attachEvent('onclick',OpenWindow);之类,看你自己了,最终是要用js数组来保存window的。

#8


引用 7 楼 Mark2Win 的回复:
lz,你可以先找到dataGrid里面模板列的那个按钮,给它附加事件代码,或者在后端用btnOPen.Attributes.add('onclick','OpenWindow()');之类,或者在前端用document.getElementsById('btn在前端的id’).attachEvent('onclick',OpenWindow);之类,看你自己了,最终是要用js数组来保存window的。

最关键的地方是我不知道怎么写在.cs文件中把打开的window的编号还是啥的识别标志传到数组再把数组传到html的js函数里的代码=_=b。。。
哪位写两句代码具体的代码吧。。。

#9


再up。
附加:每次点击datagrid模板列的按钮页面就要刷新一次,在js中定义的变量值也没有了,我要打开几个页面的话,最后实际上只能保存最后打开那个窗口的句柄,怎么办?

#10


那在子页面做个定时方法.
当检测不到window.opener的时候就自己关掉吧...

#11


引用 10 楼 natineprince 的回复:
那在子页面做个定时方法.
当检测不到window.opener的时候就自己关掉吧...

我在从A中用window.open打开的窗口B的HTML中添加了js函数
function test() 

if(window.opener!=null)
{
alert(window.opener);
setTimeout('test()', 1000);  
    }
    else
    {window.close();}

可是就算我关了A,B也没有关,alert(window.opener);仍然返回[object]。是哪里写错了么?

#12


确实写错了。应该是
<script language="javascript">
<!--
window.onload=test();
function test() 

     if(opener)
    {
if(opener.closed==false)
{
     setTimeout('test()', 1000);  
}
else{window.close();}
    }
    else{window.close();}    


 //-->
</script>
natineprince 的方法是目前最好的解决办法了,谢谢大家帮助。