繁体   English   中英

处理弹出窗口关闭的正确方法

[英]The proper way to handle popup closing

我正在寻找弹出窗口的关闭事件。 为 XUL找到了一个,但我需要它来用于 HTML。

Popup 已closed属性。

>>> var popup = open('http://example.com/', 'popup', 'height=400,width=500');
>>> popup.closed
false

嗯,我可以半秒检查一次

function open_popup() {
  var popup = open('http://example.com/', 'popup', 'height=450,width=450');
  var timer = setInterval(function(){
    if (popup.closed) {
      alert('popup closed!');
      clearInterval(timer);
    }
  }, 500);
}

我已经在 Chrome 4.0.249.27、Opera 10.10、Safari 4.0.4 和 Firefox 3.5.5 上对其进行了测试。 一切正常。

但是 setInterval 困扰我。 它很丑。 有没有更好的方法来做到这一点?

更新:我使用弹出窗口进行身份验证对话框(实际上是 oAuth)。 我想在弹出窗口关闭后(通过 postMessage)向父窗口发送一些数据。

来自另一个域的弹出窗口内的页面。 因此,由于安全限制,我无法向其添加任何事件( unload )。

由于 iframe buster 脚本,我无法使用 iframe。 所以,我不能使用任何花哨的 jQuery 模式对话框。

我无法在弹出窗口中编辑任何内容

您可能想查看unload事件,查看Javascript: Popups

编辑:正如您所说,您无法在弹出窗口中编辑任何内容,实际上已经没有任何选项了。 我相信您当前的setInterval代码可以很好地完成工作。 您应该问问自己,实时检测弹出窗口关闭是否绝对重要。 那个 500 毫秒的计时器当然不会使任何资源紧张或使某人的计算机瘫痪。

我使用过 jQuery Dialog 并且它有一个关闭事件

http://jqueryui.com/demos/dialog/

不确定我是否理解你的问题,你为什么要使用计时器?

在弹出窗口中使用 window.opener。 即类似:

onunload = opener.alert('popup closed');

要么

onunload = opener.nameOfAFunction();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM