一尘不染

是否有可能用JavaScript打开弹出窗口,然后检测用户何时关闭它?

javascript

标题中几乎所有问题。

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

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


阅读 175

收藏
2020-05-01

共1个答案

一尘不染

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

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

由于该unload事件将在用户每次离开弹出窗口中的页面时触发,而不仅仅是关闭窗口时触发,因此您应该检查弹出窗口在以下位置是否确实已关闭someFunctionToCallWhenPopUpCloses

var popUp = window.open("popup.html", "thePopUp", "");
function someFunctionToCallWhenPopUpCloses() {
    window.setTimeout(function() {
        if (popUp.closed) {
            alert("Pop-up definitely closed");
        }
    }, 1);
}

如果您无法控制弹出窗口的内容,或者您​​的目标浏览器之一不支持该unload事件,则可以在主窗口中使用某种轮询解决方案。调整间隔以适合。

var win = window.open("popup.html", "thePopUp", "");
var pollTimer = window.setInterval(function() {
    if (win.closed !== false) { // !== is required for compatibility with Opera
        window.clearInterval(pollTimer);
        someFunctionToCallWhenPopUpCloses();
    }
}, 200);
2020-05-01