我有一个由
打开的窗口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 ...
答案 0 :(得分:0)
听窗口事件似乎不起作用。我使用这个技巧来收听 window 事件(在我的情况下卸载):
在父文档上创建一个文档元素(例如span)(例如,您想要从中获取事件的文档元素):
var $unloader = $('<span style="display:none;" id="unloader"></span>');
$('body').prepend($unloader');
$(window).unload(function(){$('#unloader').click();});
在已打开的文档(例如弹出窗口)中,您可以收听现在屏蔽为点击事件的卸载事件:
$("#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);
风险在延迟中,关闭属性在执行卸载方法和事件挂钩后发生更改,因此如果延迟太短,您可能会在更改之前得到该标志,如果是太久了,你得到了不必要的延误。
我认为移动事件可以类似地处理,希望这会有所帮助。如果这种方法有任何可能的改进,请告诉我。谢谢,祝你好运。