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

时间:2009-12-05 23:39:01

标签: html dom javascript-events popup cross-domain

我正在寻找弹出窗口的近距离事件。我找到了一个for XUL,但我需要它用于HTML。

Popup有closed属性。

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

好吧,我可以check it once at half second

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模态对话框。

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

3 个答案:

答案 0 :(得分:1)

您可能需要查看unload事件,请查看Javascript: Popups

编辑:正如您所说,您无法在弹出窗口内编辑任何内容,实际上没有任何选项。我相信您当前的setInterval代码可以正常工作。您应该问自己,实时检测弹出结束是否绝对至关重要。 500毫秒计时器肯定不会对任何资源造成压力,也不会让计算机瘫痪。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

在弹出窗口中使用window.opener。例如:

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

onunload = opener.nameOfAFunction();