关闭父窗口时如何关闭子窗口(弹出窗口)

5

我正在处理一个简单的示例页面,在单击链接时会出现弹出式子窗口。 我一直在尝试各种卸载事件来关闭父窗口时关闭子窗口,但似乎无法弄清楚我错过了什么与简单编码有关的内容。

弹出窗口工作得非常完美,但关闭父窗口会使弹出窗口保持打开状态。

<!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=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<a href='javascript:void(0);' onclick='window.open("http://example.com/files/foldername/","pagename","width=800, height=800");' target='windowname'><font color="#70c7c8">Link Name</a>
</body>
</html>
1个回答

10
您正在寻找的是window.onbeforeonload事件:
<script>
    var openPopup = function() {
        var popupWindow = window.open("http://example.com","pagename","width=800, height=800");
        window.onbeforeunload = function() {
            popupWindow.close();
        };
    }
</script>
<a href='javascript:void();' onclick='openPopup()'>Click to open a window...</a>

http://jsfiddle.net/LM35w/

(您不知道我关闭窗口测试代码的次数有多少,以至于我都忘记了这个代码片段...)

(注:该内容已经是中文,无需翻译)

哈哈,天啊,我可以想象整个下午都在做那件事。那正是我缺少的命令,就是window.onbeforeonload....非常感谢你! - user3518979
嗯,看起来Chrome在处理onbeforeunload处理程序方面有一些独特的方法:https://dev59.com/tFPTa4cB1Zd3GeqPl7tP 我不知道有没有任何解决方法,抱歉。 - Daniel Beck
谢谢 @DanielBeck。我有一个问题,如何在多个子弹出窗口中实现这个。 - Karthiga
@Karthiga,方法是一样的,只需保留每个弹出窗口的引用并在每个窗口上调用.close()即可。(但请注意,此答案已过时,可能不再适用;现在在onbeforeunload处理程序中可以执行的操作有更多限制,而这些限制在2014年不存在)。 - Daniel Beck
是的,正如你所说,我将所有打开的窗口收集到一个数组中,并执行相同的操作,现在它可以正常工作了。不知道这个函数是否也适用于关闭标签页而不是关闭窗口? - Karthiga
为了这些目的,选项卡和窗口是同样的东西。 - Daniel Beck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接