子窗口关闭时如何运行父窗口的功能?

时间:2009-07-10 22:48:07

标签: javascript

我之前已经问过这个问题,问题已经解决了一半,我帮助发现Javascript有一些严格的安全措施。

我学到了什么:父窗口打开一个子窗口。子窗口重定向到不同的域并重定向回。它会在关闭自身时尝试触发父窗口的功能。

window.opener.startLoad();

这会导致权限(安全)问题,并且无法正常工作。

(一半)新问题:我如何获得一个打开子窗口的窗口,当它关闭时在父窗口中运行一个函数?

我需要一种非常有效的方法,因为这将会发生很多事情!

感谢您的帮助。

2 个答案:

答案 0 :(得分:21)

试试这个:

var win = window.open(url, name);
win.onunload = afterChildClose; // afterChildClose() is the function.
win.close(); // afterChildClose() should fire now.

所有这些代码都将在父窗口的javascript中找到并执行(包括afterChildClose())。您正在创建窗口并将该函数分配给卸载事件。

噢,我刚才想到的一件事。如果子窗口刷新或导航到另一个URL,则onunload事件也将触发。如果您只希望在窗口关闭时触发事件,则应在win.closed上包含checkChithClose()。

编辑:这是两个示例页面的代码,我将它们放在一起试用。

父窗口:

<html>
<body>
<script type="text/javascript">
    var win = window.open("secondwindow.html", "woo");
    win.onunload =onun; 

    function onun() {
        if(win.location != "about:blank") // This is so that the function 
                                          // doesn't do anything when the 
                                          // window is first opened.
        {
            alert("closed");
        }
    }
</script>
</body>
</html>

子窗口(“secondwindow.html”):

<html>
<body>
<script type="text/javascript">
    setTimeout('window.close();', 5000);
</script>
</body>
</html>

当我尝试在firefox中打开第一个文档时,它打开窗口,窗口等待5秒并退出,第一个文档显示alert(),因此即使子窗口自行关闭它也能正常工作。

答案 1 :(得分:3)

我登陆这里寻找类似的功能,但可能永远不会让它与跨浏览器兼容性。所以这是另一种在子窗口关闭时执行代码的方法:

var win = window.open("http://www.google.com");

var winClosed = setInterval(function () {

    if (win.closed) {
        clearInterval(winClosed);
        location.assign("http://www.bing.com/");  //Execute your code here
    }

}, 250);

它不使用子窗口中的任何事件处理程序,也不需要修改子窗口的内容。