繁体   English   中英

如何在window.opener上附加事件

[英]How to attach events on window.opener

我有一个被打开的窗口

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. 在父文档(例如,您要获取事件的元素)上创建一个文档元素(例如,跨度):

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

     $("#unloader",window.opener.document).click(unloadEventHandler); 

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

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

风险在于延迟,在执行unload方法和事件挂钩之后更改了closed属性,因此,如果延迟太短,您可能会在更改之前获得该标志;如果延迟太长,则会得到不必要的延迟。

我认为move事件可以类似地处理,希望这会有所帮助。 让我知道此方法是否有任何可能的改进。 谢谢,祝你好运。

暂无
暂无

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

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