100

我在 JavaScript 中通过 window.open 打开了一个弹出窗口,我想在关闭此弹出窗口时刷新父页面。(onclose 事件?)我该怎么做?

window.open("foo.html","windowName", "width=200,height=200,scrollbars=no");
4

11 回答 11

241

您可以使用“ window.opener ”访问父窗口,因此,在子窗口中编写如下内容:

<script>
    window.onunload = refreshParent;
    function refreshParent() {
        window.opener.location.reload();
    }
</script>
于 2012-05-29T02:35:18.960 回答
36

弹出窗口没有任何可以收听的关闭事件。

另一方面,当窗口关闭时,有一个 closed 属性设置为 true。

您可以设置一个计时器来检查该关闭的属性,并这样做:

var win = window.open('foo.html', 'windowName',"width=200,height=200,scrollbars=no");   
var timer = setInterval(function() {   
    if(win.closed) {  
        clearInterval(timer);  
        alert('closed');  
    }  
}, 1000); 

请参阅这个工作小提琴示例

于 2012-05-29T02:31:18.017 回答
14

在您的子页面上,放置以下内容:

<script type="text/javascript">
    function refreshAndClose() {
        window.opener.location.reload(true);
        window.close();
    }
</script>

<body onbeforeunload="refreshAndClose();">

但作为一个好的 UI 设计,你应该使用 Close button,因为它对用户更友好。请参阅下面的代码。

<script type="text/javascript">
    $(document).ready(function () {
        $('#btn').click(function () {
            window.opener.location.reload(true);
            window.close();
        });
    });
</script>

<input type='button' id='btn' value='Close' />
于 2012-05-29T02:38:38.493 回答
3

我用这个:

<script language='javascript'>
var t;
function doLoad() {
t = setTimeout("window.close()",1000);
}

</script>
<script type="text/javascript">
function refreshAndClose() {
    window.opener.location.reload(true);
    window.close();
}
</script>
<body onbeforeunload="refreshAndClose();" onLoad='doLoad()''>

当窗口关闭时,它会刷新父窗口。

于 2013-10-02T03:26:03.043 回答
2

window.open 将返回对新创建窗口的引用,前提是打开的 URL 符合Same Origin Policy

这应该有效:

function windowClose() {
    window.location.reload();
}

var foo = window.open("foo.html","windowName", "width=200,height=200,scrollbars=no");
foo.onbeforeunload= windowClose;​
于 2012-05-29T02:42:55.350 回答
2

就我而言,我在父页面中单击链接按钮时打开了一个弹出窗口。在关闭孩子时刷新父母使用

window.opener.location.reload();

在子窗口中导致重新打开子窗口(我猜可能是因为查看状态。如果我错了,请纠正我)。所以我决定不重新加载父页面并再次加载页面并为其分配相同的网址。

为了避免在关闭弹出窗口后再次打开弹出窗口,这可能会有所帮助,

window.onunload = function(){
    window.opener.location = window.opener.location;};
于 2015-06-27T13:02:22.897 回答
1

如果您的应用在支持 HTML5 的浏览器上运行。您可以使用postMessage。那里给出的例子与你的非常相似。

于 2012-05-29T02:39:02.497 回答
1

试试这个

        self.opener.location.reload(); 

打开当前窗口的父窗口并重新加载该位置。

于 2015-09-16T10:41:52.470 回答
0

您可以在步骤之后使用父命令(父是窗口)访问主页,您可以制作所有内容......

    function funcx() {
        var result = confirm('bla bla bla.!');
        if(result)
            //parent.location.assign("http://localhost:58250/Ekocc/" + document.getElementById('hdnLink').value + "");
            parent.location.assign("http://blabla.com/" + document.getElementById('hdnLink').value + "");
    } 
于 2014-10-15T09:51:07.420 回答
0

您可以在父页面中使用以下代码。

<script>
    window.onunload = refreshParent;
    function refreshParent() {
      window.opener.location.reload();
    }
</script>
于 2014-11-03T04:37:45.993 回答
0

以下代码将设法在关闭后刷新父窗口:

function ManageQB_PopUp() {
            $(document).ready(function () {
                window.close();
            });
            window.onunload = function () {
                var win = window.opener;
                if (!win.closed) {
                    window.opener.location.reload();
                }
            };
        }
于 2016-10-03T09:44:20.733 回答