如何解决如何在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 ...
解决方法
监听窗口事件似乎无效。我使用此技巧来监听窗口事件(以我的情况为例):
在父文档(例如您要从中获取事件的文档)上创建一个文档元素(例如span):
var $unloader = $(\'<span style=\"display:none;\" id=\"unloader\"></span>\');
$(\'body\').prepend($unloader\');
$(window).unload(function(){$(\'#unloader\').click();});
在打开的文档(例如弹出窗口)中,您可以收听现在被屏蔽为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事件可以类似地处理,希望这会有所帮助。让我知道此方法是否有任何可能的改进。谢谢,祝你好运。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。