js父窗口关闭时,子窗口随之关闭

最近,遇到一个权限管理的系统。由于权限管理的系统和本来的系统风格不一致,所有新打开一个窗口。问题就来了,admin注销之后,权限管理的窗口没有关闭。其他普通用户登录以后,仍然可以操作权限管理的窗口。

问题简化:admin注销的时候,或者main.html关闭的时候,打开的所有新窗口一起关闭。问题就解决了

直接看代码吧:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body onUnload="closeNews();">

<a href="#" onclick="openNew(‘http://www.baidu.com‘,‘nihao‘)">打开新窗口</a>
<a href="#" onclick="logOut();">退出登录</a>
</body>
</html>

<script>
//用户记录所有打开的子窗口
var win_Array = new Array();
var win_num = -1;

//每次打开一个新窗口都记录下来
function openNew(uri,param){
	win_num = win_num+1;
	win_Array[win_num] = window.open(uri);
}

//用户注销的时候,执行关闭方法。body添加onUnload = "closeNews();"  当main窗口关闭时候,所有的子窗口关闭
function closeNews(){
	//关闭权限管理
	if(win_Array.length > 0){
		for(var i = 0;i <= win_Array.length;i++){
			var win_one = win_Array[i];
			if(win_one != undefined){
				win_one.close();
			}
		}
	}
}

function logOut(){
	//关闭子窗口
	closeNews();

	//退出登录
}

</script>

说明一下:

<body onUnload="closeNews();">在body上添加onUnload事件很重要。即:当窗口关闭以后,执行关闭所有子窗口的方法。

测试:在web项目中,ie8,ie10,火狐,chrome,opera都没有问题。

一旦不放倒wen容器中,只是静态的 main.html页面的时候,ie有问题,因为静态的时候,ie的window.open()居然是打开新页面,不是打开新标签。所有关闭窗口的方法不再有效。

时间有限,还没有花精力去细究,还望知道为什么的js技术大神 可以指导一下。再次致谢。

时间: 2024-12-18 15:57:41

js父窗口关闭时,子窗口随之关闭的相关文章

JS实现关闭当前子窗口,刷新父窗口

一.JS实现关闭当前子窗口,刷新父窗口 JS代码如下: <script> function refreshParent() {  window.opener.location.href = window.opener.location.href;  window.close();   }              </script>

JS实现关闭当前子窗口,刷新父窗口及调用父窗口的方法

一.JS实现关闭当前子窗口,刷新父窗口 JS代码如下: <script> function refreshParent() { window.opener.location.href = window.opener.location.href; window.close(); } </script> html页面代码如下: <input type="button" id="btn1" class="btn" valu

(转)C#在父窗口中调用子窗口的过程(无法访问已释放的对象)

C#在父窗口中调用子窗口的过程: 1. 创建子窗口对象 2. 显示子窗口对象 笔者的程序中,主窗体MainFrm通过菜单调用子窗口ChildFrm.在窗体中定义了子窗口对象,然后在菜单项点击事件中,加入了如下代码来创建和显示子窗口: Private childFrm myChildFrm = null; //定义子窗口对象 private void OpenChildFrmToolStripMenuItem_Click(object sender, EventArgs e) { myChildF

window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口

window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口 项目中经常遇到一个业务逻辑:在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口(或局部更新A窗口)(或将数据传回A窗口) 以下是从实际项目中截取出来和window.open()方法相关的代码,业务逻辑如下: 1. 点击父窗口的div标签(id="addMatchSchedule"),出发点击事件,打开子窗口: 2. 点击子窗口的button按钮,触发点击时间,即调用addSchduleI

父窗口调用iframe子窗口方法

一.父窗口调用iframe子窗口方法 1.HTML语法:<iframe name="myFrame" src="child.html"></iframe> 2.父窗口调用子窗口:myFrame.window.functionName(); 3.子窗品调用父窗口:parent.functionName(); 简单地说,也就是在子窗口中调用的变量或函数前加个parent.就行 4.父窗口页面源码: 复制代码 代码如下:<html> &

主窗口刷新,子窗口闪烁

问题:主窗口刷新,子窗口闪烁 解决方案:主窗口创建时,传WS_CLIPCHILDREN

WPF 多屏时子窗口的屏幕位置问题

问题: 在多个显示屏运行的情况下,如果将主窗口从当前显示屏移动到另一显示屏. 设置子窗口单例模式,在当前显示屏时弹出后,在主窗口移动到另一显示屏后,再弹出子窗口时,你会发现子窗口跑到原来显示屏去了. ----这是WPF的锅 因为已经设置了WindowStartupLocation="CenterOwner",也加了Owner的情况下,窗口每次弹出,理论上就该和主窗口保持在同一屏幕的. 解决: 通过窗口的Activated添加委托,每次窗口唤醒,都重新设置窗口的Location subW

js拼接字符串传值,子窗口传值

避免下次再去查资料,记录一下 1.拼接字符串传值 "UpdateState?ids=" + subStr+"&remark="+reValue) 目标页面接受:public ActionResult UpdateState(string ids, string remark) 2.弹出窗口传值 弹出子窗口:var reValue = window.showModalDialog('Dialog', obj, 'dialogWidth=120px;dialog

Duilib中创建子窗口后,子窗口销毁的问题

自己在学习Duilib时,学习ListDemo中的右键生成菜单,然后当菜单被点击活着失去焦点时,这个菜单窗口如何销毁的问题. 1.在这里,创建菜单时使用了子窗口的概念,创建时,使用了WS_EX_TOOLWINDOW类型,表示是一个工具栏窗口. 2.这个菜单窗口有自己的消息处理函数HandleMessage.第一次的尝试是调用CWindowWnd中的Close函数,查看了这个函数的源码,发现其中是使用PostMessage给自己发送了一个WM_CLOSE的消息,然后在HandleMessage中拦

【VC】Dialog 窗口任意分割子窗口。

用 Dialog 对话框来实现窗口的任意分割. 在资源中添加  Dialog 选择  IDD_FORMVIEW 资源..分别新建FormViewOne,FormViewTwo FormViewThree 类,分别继承基类 CFormView. class CMyFormViewOne : public CFormView { DECLARE_DYNCREATE(CMyFormViewOne) protected: CMyFormViewOne(); // 动态创建所使用的受保护的构造函数 vir