如果你在某个页面打开了一个子窗口,那么你可以在该页面(即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)子窗口: