函数window.open实现关闭所有的子窗口

此文介绍了如何用window.open方法打开一个子窗口,当我们要关闭主窗口时,这时候所有的子窗口也会跟着关闭。下面有我的实现思路和代码,分享给大家。

实现思路:
1.打开子窗口函数window.open(url,winName)的第二个参数winName可以唯一标识打开的窗口。因此关闭子窗口只需要使用winName.close()函数即可。
2.一个页面可能有多个子窗口。因此需要一个数组存储所有子窗口对象。关闭时,遍历数组即可。
3.子窗口还可以再打开子窗口。无限循环下去。因此需要判断。
此需求可以通过两个方法实现。

调用子窗口的关闭函数。
此方法易于理解,但是实际实现过程中发现浏览器的关闭事件并没有。且需要是按钮点击关闭还是快捷键关闭,稍微麻烦一些、递归关闭子窗口
此方法实现简单,缺点就是所有的窗口存储子窗口的对象数组需同名

下面是使用递归关闭子窗口及子窗口的子窗口方法

function closeSonWindow(win){
  for(var index=0;index<win.length;index++){
    //如果窗口已关闭
    if(win[index].closed){
      continue;
    }
    //如果窗口没有可以打开的子窗口
    if(typeof(win[index].openedWindow)=="undefined"){
      win[index].close();
      continue;
    }
    if(win[index].openedWindow.length==0){
      win[index].close();
    }else{
      closeSonWindow(win[index].openedWindow);
      win[index].close();
    }
  }
}

以上就是本文的全部叙述,希望对大家有所帮助。

(0)

相关推荐

  • javascript showModalDialog传值与FireFox的window.open 父子窗口传值示例第1/2页

    先简单介绍一下基本知识: 一.window.open()支持环境: Java1.0+/J1.0+/Nav2+/IE3+/Opera3+ 二.基本语法: window.open(pageURL,name,parameters) 其中: pageURL 为子窗口路径 name 为子窗口句柄 parameters 为窗口参数(各参数用逗号分隔) 三.各项参数 其中yes/no也可使用1/0:pixel value为具体的数值,单位象素. 参数 | 取值范围 | 说明 alwaysLowered | y

  • 如何在父窗口中得知window.open()出的子窗口关闭事件

    复制代码 代码如下: <HTML> <BODY> <P> </P> <form name=fm_Info> <input type=text name=txtValue> </form> <script language=javascript> var timer var winOpen function IfWindowClosed() { if (winOpen.closed == true) { docu

  • 函数window.open实现关闭所有的子窗口

    此文介绍了如何用window.open方法打开一个子窗口,当我们要关闭主窗口时,这时候所有的子窗口也会跟着关闭.下面有我的实现思路和代码,分享给大家. 实现思路: 1.打开子窗口函数window.open(url,winName)的第二个参数winName可以唯一标识打开的窗口.因此关闭子窗口只需要使用winName.close()函数即可. 2.一个页面可能有多个子窗口.因此需要一个数组存储所有子窗口对象.关闭时,遍历数组即可. 3.子窗口还可以再打开子窗口.无限循环下去.因此需要判断. 此需

  • C#实现关闭子窗口而不释放子窗口对象的方法

    在线扫描相机的调试过程中,需要开辟调试界面来进行位置的配置.调试结束后,一种常用的方式是将调试参数保存并在下次启动时加载.另一种简单方式是直接使用该参数运行程序.因此,在后一种情况下,需要实现的功能是:即使关闭调试窗口,其窗口对象也不释放.除非其主窗口关闭,才销毁其调试窗口的对象. 1 在主窗口中实例化子窗口 在主窗口中实例化子窗口,而不是在按钮中实例化子窗口对象. Form2 f2 = new Form2(); 2 通过按钮来显示主窗口 在按钮中需要实现的是窗口的显示 private void

  • JavaScript子窗口ModalDialog中操作父窗口对像

    在ModalDialog中操作父窗口对象 1.不能使用window.parent Window.parent是用来在frame中进行操作的,在对话框中不能用来操作父窗口对象 2.正确的做法 调用modaldialog时通过传参数的方式操作 例: 需求 父窗口页面为a.html 子窗口页面为b.html.a.html中有文本框id为test1,在打开的对话框中点击按钮,将a.html的文本框值改为"子窗口值". 实现 打开对话框时把test1作为参数传给子窗口,在子窗口中获取参数,将参数

  • JS中showModalDialog关闭子窗口刷新主窗口用法详解

    本文实例讲述了JS中showModalDialog关闭子窗口刷新主窗口用法.分享给大家供大家参考,具体如下: 网上找了好长时间 大都是window.opener.location.reload(),等等 都不是我想要的 最后终于发现了一个 想知道的就往下看看吧 showModalDialog和showModelessDialog 一.showModalDialog和showModelessDialog有什么不同? showModalDialog:被打开后就会始终保持输入焦点.除非对话框被关闭,否

  • JavaScript子窗口调用父窗口变量和函数的方法

    本文实例讲述了JavaScript子窗口调用父窗口变量和函数的方法.分享给大家供大家参考.具体如下: 示例1:子窗口是新打开的窗口 父窗口: <!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.

  • JS关闭子窗口并且刷新上一个窗口的实现示例

    在开发后台项目的时候产品那边提出了这个一个需求:用户点击"选择模板"的时候会弹出一个新窗口,在新窗口选择模板点击确定后,会关闭当前的新窗口,并且原来的那个窗口自动显示用户在新窗口的选择项. 这样会涉及到一个技术点,就是怎么通过JS来实现关闭子窗口并且刷新上一个窗口. 百度了很久,尝试了以下几种方案: 方案一:通过在子窗口的关闭函数中加入以下代码,即可实现父窗口的刷新. window.opener.location.href = window.opener.location.href;

  • js父窗口关闭时子窗口随之关闭完美解决方案

    最近,遇到一个权限管理的系统.由于权限管理的系统和本来的系统风格不一致,所有新打开一个窗口.问题就来了,admin注销之后,权限管理的窗口没有关闭.其他普通用户登录以后,仍然可以操作权限管理的窗口. 问题简化:admin注销的时候,或者main.html关闭的时候,打开的所有新窗口一起关闭.问题就解决了 直接看代码吧: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "h

  • vue路由跳转打开新窗口(window.open())和关闭窗口(window.close())

    目录 vue路由跳转打开新窗口和关闭窗口 编程式导航 window.open( )方法 关闭窗口 window.close() vue路由跳转打开新窗口(被浏览器拦截) 第一种方法 第二种方法 第二种方法(改良版) 总结 vue路由跳转打开新窗口和关闭窗口 需求:从当前页面跳转到其他页面时,打开一个新窗口 比如:点击页面上的用户反馈,打开用户反馈的新页面,要使用编程式导航 编程式导航 使用路由对象的resolve的方法解析路由,可以得到location.router.href等目标路由的信息,只

  • c# 实现子窗口关闭父窗口也关闭的简单实例

    其实是窗口间通讯的问题,在form1上打开form2 ,form2 关闭时关闭form1 实现方法: 在子窗口form2中声明事件: public delegate void childclose(); public event childclose closefather; 然后在它的关闭事件中触发本事件: private void Form2_Closed(object sender, System.EventArgs e) { //用事件去关闭主窗口 closefather(); } 在父

  • c# 实现子窗口关闭父窗口也关闭的方法

    其实是窗口间通讯的问题,在form1上打开form2 ,form2 关闭时关闭form1 实现方法: 在子窗口form2中声明事件: public delegate void childclose(); public event childclose closefather; 然后在它的关闭事件中触发本事件: private void Form2_Closed(object sender, System.EventArgs e) { //用事件去关闭主窗口 closefather(); } 在父

随机推荐