正在尝试处理子窗口上的关闭窗口事件
Trying to handle a close window event on child window
我有一个打开新窗口的网站。我正在尝试在子窗口上触发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!');
}
非常感谢任何试图提供帮助的人。
相关文章:
- 正在尝试处理子窗口上的关闭窗口事件
- 通过防止窗口事件问题防止双重提交
- 收听Angularjs服务中的窗口事件
- 跨浏览器窗口事件
- 谷歌地图信息窗口事件打开
- 有没有办法先触发窗口事件
- 流星 - 谷歌地图信息窗口事件未触发
- 如何在角度中正确解绑窗口事件
- Chrome扩展程序:检测从后台创建窗口事件
- 窗口事件在FireFox中不起作用
- 自定义确认框,该框具有关闭窗口事件的某些功能
- 自动创建并触发窗口事件
- 如何在JQuery 1.9中获取所有窗口事件
- 窗口事件的JQuery函数:组合加载和调整大小
- 窗口.事件不能在firefox上工作
- Firefox扩展中的打开窗口事件
- 在Javascript中,我如何解除绑定一个窗口事件
- React.js关于监听组件窗口事件的最佳实践
- 如何使用Backbone-Views检测窗口事件?
- jQuery的窗口事件函数(加载和调整大小)