Javascript 正在尝试处理子窗口上的关闭窗口事件
我有一个打开新窗口的网站。我试图在子窗口上触发Javascript 正在尝试处理子窗口上的关闭窗口事件,javascript,jquery,Javascript,Jquery,我有一个打开新窗口的网站。我试图在子窗口上触发onclose事件(如果用户关闭了窗口,父窗口将向其发出警报) 我在以下位置发现了有关该问题的stackoverflow问题: 但是,答案也会在子窗口上执行操作,我认为我不能这样做,因为子窗口打开的网站不在我的控制范围内(我不能编辑它的html) 我正在考虑使用以下命令来触发on close事件 var inFormOrLink; $('a').live('click', function() { inFormOrLink = true; }); $
onclose
事件(如果用户关闭了窗口,父窗口将向其发出警报)
我在以下位置发现了有关该问题的stackoverflow问题:
但是,答案也会在子窗口上执行操作,我认为我不能这样做,因为子窗口打开的网站不在我的控制范围内(我不能编辑它的html)
我正在考虑使用以下命令来触发on close事件
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);
}
});
}
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;
$wID = $_POST['windowID'];
file_put_contents($wID,$wID);
windowclosed.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;
$wID = $_POST['windowID'];
file_put_contents($wID,$wID);
这是伪代码,还没有经过测试。这个功能可以用很多种方式编写,我就是这么做的。找到了我所寻找的解决方案。这比上面的答案再加上它的实际效果和我想要的要容易得多
var win = open('http://www.google.com');
if (win.closed) {
alert('Window closed! Hoorah!');
}
非常感谢尝试帮助的人。这不需要我也控制第二个弹出窗口(服务器端)吗?弹出窗口通常加载其他网站,这意味着我无法在服务器端更改任何内容。老实说,我认为这是不可能的。您需要通过服务器在windows之间进行通信,如果没有,则没有任何方法。Korin感谢您的所有帮助和其他解决方案,但找到了查看我的回答我找到了一些可能有用的方法,但他们再次在子窗口上执行操作。你可以控制子窗口加载的原始站点吗?是的,我可以控制父站点(原始站点),我不能控制子站点,但是如果有办法将功能添加到子窗口,那么我可以做一些事情。