Javascript 如何在window.opener上附加事件

Javascript 如何在window.opener上附加事件,javascript,jquery,popup,Javascript,Jquery,Popup,我有一扇窗户是靠窗户打开的 var myWindow = window.open( 'popupManager.htm', 'myWindow', 'status=0,toolbar=0,width=500,height=100'); 它将充当调试窗口 在内部,我想在window.opener上连接windows事件,但我无法实现这一点。两个URL位于同一域/同一网站中 例如,我可以

我有一扇窗户是靠窗户打开的

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…

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

  • 在父文档(例如,要从中获取事件的文档)上创建文档元素(例如,span):

  • 如果需要检测卸载是关闭还是导航事件,可以在延迟后检查父级的closed属性:

        window.setTimeout(function(){
            if(window.opener.closed == true) {
                 // Close event
            } else {
                // Navigation event
                // window.opener.location to get new location
            }
        },500);
    
    风险在于延迟,closed属性在卸载方法和事件挂钩执行后更改,因此如果延迟太短,您可能会在更改之前获得标志,如果延迟太长,则会获得不必要的延迟


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

    为什么不为
    move
    事件使用
    bind
    ?因为如果您通过
    window.opener
    $(window.opener).bind(“move”,function(){…}),它就不起作用
    
    $("#unloader",window.opener.document).click(unloadEventHandler);
    
        window.setTimeout(function(){
            if(window.opener.closed == true) {
                 // Close event
            } else {
                // Navigation event
                // window.opener.location to get new location
            }
        },500);