是否可以使用javascript打开弹出窗口,然后检测用户何时关闭它?

时间:2010-07-20 15:37:36

标签: javascript jquery popup

这个问题几乎都在标题中。

是否可以(以及如何?)使用javascript打开弹出窗口,然后检测用户何时关闭它?

我在项目中使用jquery,所以jquery解决方案会很好。干杯!

8 个答案:

答案 0 :(得分:89)

如果您可以控制弹出窗口的内容,请在那里处理窗口的unload事件,并通过opener属性通知原始窗口,首先检查开启器是否已关闭。请注意,这在Opera中并不总是有效。

window.onunload = function() {
    var win = window.opener;
    if (!win.closed) {
        win.someFunctionToCallWhenPopUpCloses();
    }
};

由于unload事件会在弹出窗口中导航离开页面而不是窗口关闭时触发,因此您应该检查弹出窗口是否已实际关闭{{1 }}:

someFunctionToCallWhenPopUpCloses

如果您无法控制弹出窗口的内容,或者您​​的某个目标浏览器不支持var popUp = window.open("popup.html", "thePopUp", ""); function someFunctionToCallWhenPopUpCloses() { window.setTimeout(function() { if (popUp.closed) { alert("Pop-up definitely closed"); } }, 1); } 事件,那么您将被简化为主要的某种轮询解决方案窗口。调整间隔以适应。

unload

答案 1 :(得分:6)

尝试查看unloadbeforeunload窗口事件。监视这些应该让你有机会在窗口关闭时通过类似这样的东西卸载DOM时回调:

var newWin = window.open('/some/url');
newWin.onunload = function(){
  // DOM unloaded, so the window is likely closed.
}

答案 2 :(得分:6)

如果您可以使用jQuery UI Dialog,则实际上会有close个事件。

答案 3 :(得分:6)

您的问题有一个非常简单的解决方案。

首先制作一个新对象,打开一个像这样的流行音乐:

var winObj = window.open('http://www.google.com','google','width=800,height=600,status=0,toolbar=0');

为了知道这个弹出窗口何时关闭,你只需要用以下循环来检查它:

var loop = setInterval(function() {   
    if(winObj.closed) {  
        clearInterval(loop);  
        alert('closed');  
    }  
}, 1000); 

现在,您可以使用任何所需的JavaScript代码替换警报。

玩得开心! :)

答案 4 :(得分:3)

打开新窗口调用:

var wnd = window.open("file.html", "youruniqueid", "width=400, height=300");

如果您只想知道该窗口何时关闭,请使用onunload

wnd.onunload = function(){
    // do something
};

如果您想在关闭之前获得用户的确认,请使用onbeforeunload

wnd.onbeforeunload = function(){
    return "are you sure?";
};

答案 5 :(得分:3)

我们在我的一个工作项目中这样做。

诀窍是在弹出窗口关闭时计划调用的父页面中有一个JS函数,然后在弹出窗口中挂钩unload事件。

window.opener属性是指产生此弹出窗口的页面。

例如,如果我在原始页面上编写了一个名为callingPageFunction的函数,我会从弹出窗口中调用它:

$(window).unload(function() {
    window.opener.callingPageFunction()
});

两个注释:

  1. 这应该包含在就绪函数中。
  2. 我有一个匿名函数,因为你可能想要其他逻辑

答案 6 :(得分:1)

我认为最好的方法是:

const popup = this.window.open(url.toString());
popup.addEventListener('unload', ()=> console.log('closed'))

答案 7 :(得分:0)

是,处理弹出窗口的onbeforeUnload事件,然后使用以下命令调用父窗口上的函数:

window.opener.myFunction()