正在尝试处理子窗口上的关闭窗口事件

Trying to handle a close window event on child window

本文关键字:窗口 事件 理子 处理      更新时间:2023-09-26

我有一个打开新窗口的网站。我正在尝试在子窗口上触发onclose事件(如果用户关闭了该窗口,父窗口将向其发出警报)。

我发现了一个关于这个问题的stackoverflow问题:当子窗口关闭时,如何运行父窗口的函数?

但是,答案也在子窗口上预成型操作,我认为我不能这样做,因为子窗口打开了一个不在我控制范围内的网站(我不能编辑它的html)。

我正在考虑使用以下内容来触发关闭事件

var inFormOrLink;
$('a').live('click', function() { inFormOrLink = true; });
$('form').bind('submit', function() { inFormOrLink = true; });
$(window).bind("beforeunload", function() { 
    return inFormOrLink;
})

如何在新选项卡/窗口中应用此功能?

这不可能仅在客户端上完成。为了做到这一点,您需要执行以下操作:

  • 打开一个选项卡后,向一个脚本发送一个ajax调用,该脚本在收到第二个ajax调用之前不会停止加载,这通常是通过一个等待sql值存在后再输出的脚本来完成的
  • 关闭选项卡后,向该脚本发送第二个ajax调用,以便它回复原始ajax调用

维奥拉。

我不知道有什么更简单的方法可以做到这一点。

原始窗口:

function waitForTabClose(windowID) {
    $.post('waitfortabclose.php',{windowID:windowID},function(data) {
        if (data == 1) { 
             // Do tab closed stuff
        } else {
            waitForTabClose(windowID);
        }
    });
}

waitfatabclose.php

$i=1;
$wID = $_POST['windowID'];
do {
    if (file_get_contents($wID) == $wID) {
        echo 1;exit;
    }
    set_time_limit(30);
    sleep(5);
} while($i++ < 50);
echo 0;

新建选项卡

window.onclose = function() {
    $.post('windowclosed.php',{windowID:windowID);
};

windowclosed.php

$wID = $_POST['windowID'];
file_put_contents($wID,$wID);

这是伪代码,尚未经过测试。该功能可以用多种方式编写,这正是我要做的。

找到了我想要的解决方案。这比上面的答案简单多了,再加上它的实际效果和我想要的东西。

var win = open('http://www.google.com');
if (win.closed) {
    alert('Window closed! Hoorah!');
}

非常感谢任何试图提供帮助的人。