JavaScript系列之关闭子窗口

ZDNet软件频道 时间:2004-05-12 作者:Builder.com |  我要评论()
本文关键词:javatips
如果你在某个页面打开了一个子窗口,那么你可以在该页面(即opener 文件)关闭的时候关闭其子窗口。实现这一想法的代码看上去可能会有点诡异,但是它确实有用。
本文译自TechRepublic,未经许可请勿转载

如果你在某个页面打开了一个子窗口,那么你可以在该页面(即opener 文件)关闭的时候关闭其子窗口。实现这一想法的代码看上去可能会有点诡异,但是它确实有用。

一旦打开了一个新窗口,点击 Reload 或 Refresh 按钮就可以关闭它。代码如下:

var subWin = null;

function popOne() {
  subWin = window.open('yourURL.html','aWin','height=200,width=200');
}

function eradic8() {
  if (subWin != null && subWin.open) subWin.close();
}

<body ?onUnload="eradic8()">

我知道,window 并没有 open 属性。找 JavaScript 解析器抱怨去吧。如果你不包含这个属性,那么在 IE 和 Communicator 的 4.x 版本运行这个函数就有可能产生错误——尤其是用户在手工关闭子窗口的时候。

如果想要在其它窗口获得焦点的时候自动关闭 JavaScript 产生的窗口(或者多个窗口),那么可以使用 onFocus 而非 onUnload 来触发关闭事件。这也正是我在本文中自动关闭几个示例窗口的技巧。

为什么要为自动关闭窗口而自找麻烦呢?答案是用户不应该被迫做他们能力之外之事。如果你强迫一个站点访问者打开一个新窗口,你就应该在没有用户参与的情况下自动地关闭窗口。

另外一种方法

你也可以在opener 窗口对象关闭时关闭其子窗口。实现它的代码与技巧9中的稍有不同,而且它只能用于 Communicator ,在 IE 下不能运行。

因为 Builder.com 站点并没有框架,所以示例 dependent(依赖)窗口只有在浏览器退出之后才会关闭。

因为框架本身也是窗口对象,所以 dependent 的行为与框架集不同;从一个框架打开的 dependent 子窗口将会在框架集退出时关闭。

在 window 的 open() 方法的第三个参数中加入一个 dependent 作为特性,就能够让用户在关闭某个窗口对象时自动地关闭它打开的子窗口。例如:

function playItAgain() {
  popWin = window.open('aurl.html','win','dependent,resizable,top=20,left=20,height=200,width=200');
}

注意当一个新窗口被指定为 dependent 时,标题字体粗度变细,标题栏的 Navigator 图标、最小化按钮和调整大小按钮被移除。

非依赖(Non-dependent)子窗口:

依赖(dependent)子窗口:


本文作者:Brent Lee Metcalfe 是一位 Web 架构顾问。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134