试图在子窗口上处理关闭窗口事件

时间:2012-09-12 01:40:14

标签: javascript jquery

我有一个打开新窗口的网站。我试图在子窗口上触发onclose事件(如果用户关闭窗口,父窗口将提醒它)。

我在How to run function of parent window when child window closes?

找到了有关该问题的stackoverflow问题

但是,答案还会对子窗口执行操作,我认为我不能这样做,因为子窗口打开了一个不在我控制范围内的网站(我无法编辑它的html)。

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

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

$(window).bind("beforeunload", function() { 
    return inFormOrLink;
})

如何在新标签/窗口中应用此功能?

2 个答案:

答案 0 :(得分:0)

这不可能仅在客户端进行。 为此,您需要执行以下操作:

  • 打开选项卡后,向脚本发送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);
        }
    });
}

<强> waitfortabclose.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);

这是伪代码,尚未经过测试。功能可以用很多方式编写,这就是我的工作方式。

答案 1 :(得分:0)

找到了我想要的解决方案。它比上面的答案加上它的实际效果和我想要的要容易得多。

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

非常感谢那些尝试过帮助的人。