打开弹出窗口并在关闭弹出窗口时刷新父页面

IT技术 javascript html dom-events
2021-02-04 18:16:43

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

window.open("foo.html","windowName", "width=200,height=200,scrollbars=no");
6个回答

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

<script>
    window.onunload = refreshParent;
    function refreshParent() {
        window.opener.location.reload();
    }
</script>
我不知道 window.opener,谢谢!我总是把调用者窗口放在孩子的 contentWindow 中的一个变量中。:-/
2021-03-18 18:16:43
如果您不控制子页面上的 JavaScript(例如 OAuth 流程),那么您将需要popupWindow.closed使用setInterval@Zuul 的解决方案中的 like进行检查
2021-04-10 18:16:43

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

另一方面,当窗口关闭时,有一个 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); 

请参阅此工作 Fiddle 示例

如果弹出窗口在关闭之前有多个页面,这也是最好的解决方案,因为只有在用户导航离开第一页后才会触发 onunload 事件。
2021-03-20 18:16:43
有点骇人听闻,但我认为使用计时器在所有浏览器中效果最好。
2021-03-23 18:16:43
我不想使用计时器!还有其他想法吗?
2021-03-25 18:16:43

在您的子页面上,放置这些:

<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' />
我使用了 <body onbeforeunload="refreshAndClose();"> <script type="text/javascript"> function refreshAndClose() { window.opener.location.reload(true); } self.close(); </脚本>
2021-03-14 18:16:43
@gengkev,我知道 OP 想将事件附加到窗口关闭,但我相信使用按钮是更好的 UI 设计。但是,我包含了两者的代码。请指教。
2021-03-22 18:16:43
当弹出窗口关闭时,而不是当用户单击按钮刷新页面并关闭弹出窗口时
2021-03-23 18:16:43

我用这个:

<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()''>

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

window.open 将返回对新创建窗口的引用,前提是打开的 URL 符合同源策略

这应该有效:

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

var foo = window.open("foo.html","windowName", "width=200,height=200,scrollbars=no");
foo.onbeforeunload= windowClose;​
如果用户能够在打开的窗口中点击链接,则将无法工作。而且我很确定在第一次加载目标 URL 之前会抛出一个卸载事件,因为你隐式地离开了 about:blank。(+1 提到 SOP)
2021-03-21 18:16:43