当前位置:  开发笔记 > 编程语言 > 正文

当弹出窗口关闭时,如何引发事件(jQuery或vanilla Javascript)?

如何解决《当弹出窗口关闭时,如何引发事件(jQuery或vanillaJavascript)?》经验,为你挑选了2个好方法。

我想在弹出窗口关闭时或者最好在关闭之前引发一个事件.我将弹出窗口对象存储为对象,但我不知道绑定到close事件的任何方式,或者在窗口关闭之前的事件.

var popupWindow = window.open("/popup.aspx", "popupWindow", "height=550,);

有没有办法使用jQuery订阅close事件,或只是原始的javascript?我正在使用jQuery并且无法添加另一个库,所以如果它不能在jQuery中完成,我将不得不以某种方式滚动我自己的事件系统,以便它可以在所有浏览器中工作.

更新:
我已经尝试在jQuery中使用unload事件,由于某种原因,只要我的弹出窗口打开而不是关闭时就会引发事件.如果我使用Firebug设置断点来延迟卸载事件的订阅,则卸载事件的工作方式应该如此,但无论出于何种原因,当允许javascript自然执行时它无法正常工作.

var popupWindow = window.open("/popup.aspx", "popupWindow", "height=550,);
$(popupWindow.window).unload(function() { alert('hello'); });

有没有人知道为什么在窗口加载时可以引发卸载事件?

另一个问题是,我注意到jQuery的"卸载"事件不会像通常那样保持订阅窗口:

popupWindow.onunload = function(){alert('hello')};

它似乎每次提出时取消订阅该事件.这应该发生吗?如果它不是jQuery中的这个bug(或功能?),那么在加载时引发事件就好了,因为我可以检查popupWindow.closed事件内部的属性以确保窗口真的关闭.



1> Magnus Ottos..:

我创建了一个观察器来检查窗口是否已关闭:

var w = window.open("http://www.google.com", "_blank", 'top=442,, true);
var watchClose = setInterval(function() {
    if (w.closed) {
     clearTimeout(watchClose);
     //Do something here...
    }
 }, 200);



2> 小智..:

我尝试了观察者的方法,但在IE6中使用它时遇到了"允许拒绝"问题.发生这种情况的原因是,在关闭窗口的情况下,封闭的属性无法完全访问...但幸运的是,使用try {} catch构造它可以工作:o)

var w = window.open("http://www.google.com", "_blank", 'top=442,, true);

var watchClose = setInterval(function() {
    try {
        if (w.closed) {
            clearTimeout(watchClose);
            //Do something here...
        }
    } catch (e) {}
}, 200);

谢谢马格努斯

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有