0

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

我在以下位置找到了关于该问题的 stackoverflow 问题:如何在子窗口关闭时运行父窗口的功能?

但是,答案也会对子窗口执行我认为我无法执行的操作,因为子窗口打开了一个不受我控制的网站(我无法编辑其 html)。

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

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

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

如何在新选项卡/窗口上应用它?

4

2 回答 2

0

找到了我正在寻找的解决方案。这比上面的答案要容易得多,加上它的实际效果和我正在寻找的东西。

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

非常感谢任何尝试帮助的人。

于 2012-09-12T04:50:06.957 回答
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);
};

窗口关闭.php

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

这是伪代码,未经测试。该功能可以通过多种方式编写,这就是我的做法。

于 2012-09-12T01:47:53.637 回答