[英]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 ...
监听窗口事件似乎不起作用。 我使用此技巧来监听窗口事件(以我的情况为例):
在父文档(例如,您要获取事件的元素)上创建一个文档元素(例如,跨度):
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事件可以类似地处理,希望这会有所帮助。 让我知道此方法是否有任何可能的改进。 谢谢,祝你好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.