如何在window.opener上附加事件

时间:2011-05-23 12:27:24

标签: javascript jquery popup

我有一个由

打开的窗口
var myWindow = window.open(
                  'popupManager.htm', 
                  'myWindow', 
                  'status=0,toolbar=0,width=500,height=100');

它将充当调试窗口。

在里面我想挂钩window.opener上的Windows事件,我没有让它工作。两个URL都在同一个域/同一个网站中。

我可以使用例如

来连接DOM元素
$("input[soid=DlgButtonBar_cancelButton]", window.opener.document).bind("click", function() {
    alert('Cancel button was pressed!');
    window.close();
});

但我希望与move事件(window.onMove)和close事件挂钩。

尝试了

window.opener.addEventListener('move', function() { console.log('moving...'); });

没有运气。

诀窍是什么?使用jQuery或简单的javascript ...

1 个答案:

答案 0 :(得分:0)

听窗口事件似乎不起作用。我使用这个技巧来收听 window 事件(在我的情况下卸载):

  1. 在父文档上创建一个文档元素(例如span)(例如,您想要从中获取事件的文档元素):

    var $unloader = $('<span style="display:none;" id="unloader"></span>');
    $('body').prepend($unloader');    
    $(window).unload(function(){$('#unloader').click();});
    
  2. 在已打开的文档(例如弹出窗口)中,您可以收听现在屏蔽为点击事件的卸载事件:

    $("#unloader",window.opener.document).click(unloadEventHandler);
    
  3. 如果您需要检测卸载是关闭还是导航事件,您可以在延迟后检查父级的已关闭属性:

        window.setTimeout(function(){
            if(window.opener.closed == true) {
                 // Close event
            } else {
                // Navigation event
                // window.opener.location to get new location
            }
        },500);
    

    风险在延迟中,关闭属性在执行卸载方法和事件挂钩后发生更改,因此如果延迟太短,您可能会在更改之前得到该标志,如果是太久了,你得到了不必要的延误。

    我认为移动事件可以类似地处理,希望这会有所帮助。如果这种方法有任何可能的改进,请告诉我。谢谢,祝你好运。