【问题标题】:Detect when a popup is closed检测弹出窗口何时关闭
【发布时间】:2012-01-17 17:18:29
【问题描述】:

我有一个弹出窗口:

var popup = window.open(URL, ...) //content of popup is not in my control

我想知道弹出窗口何时关闭,并认为下面的代码可以帮助我。

$(popup).unload()

但是,Firefox 在弹出窗口出现时启动卸载事件,而不是在它关闭时!

有没有可靠的方法来知道弹出窗口何时关闭,打开者?

我不太喜欢每隔(比如)500 毫秒轮询一次弹出窗口是否关闭...

(我在How to know when popup is closed in javascript找到了这个解决方案)

【问题讨论】:

  • 这个问题已经被问及回答了。试试stackoverflow.com/questions/2797560/…
  • 我不知道这有什么关系。是否建议在子窗口中添加卸载回调?
  • 你能在弹出窗口中添加一个 onbeforeunload 回调吗???

标签: javascript jquery popup onunload


【解决方案1】:

如果您可以在弹出窗口中添加onbeforeunload event handler,请尝试这样的操作,

父母:

function parentCallback(){
  alert("popup is closed");
}

var popup = window.open(URL, ...);

弹出:

window.onbeforeunload = function(){
    window.opener.parentCallback();
    self.close();
};

否则使用interval,这就是我可以建议的,类似

var pop_win = window.open(url,...);   
var timer = setInterval(function() {   
    if(pop_win.closed) {  
        clearInterval(timer);  
        alert('popup is closed');  
    }  
}, 1000);  

【讨论】:

【解决方案2】:

如果 popup.location 关闭,它似乎将返回 null,如果它打开,则返回一个空集。

popup.location // Open Window

=> Location 
      No Properties Defined

popup.location // Closed Window

=> null

测试:

if (popup.location) {alert('hello')}

【讨论】:

  • 我想这需要轮询,虽然 sigh
  • 那么您是否建议轮询弹出对象,直到它的位置为空?没有其他选择吗?
【解决方案3】:

我知道这个问题有点老了,但是对于寻找答案的其他人,我想我已经找到了解决方案:

你也许可以这样做(无论如何它对我有用,在 FF 中也是如此):

家长:

var popup = window.open("about:blank"); // Or whatever page you are loading
popup.onunload = function(){
    parent.location.reload();
        // or
    parent.alert("Popup closed!");
        // or any other handler in the parent window,
        // just remember to call it on the parent object.
};

【讨论】:

  • 你说的parent,我很确定你的意思是windowwindow 不应该根据函数上下文而改变,据我所知,只有 this 会这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多