【发布时间】:2009-04-23 13:41:44
【问题描述】:
子窗口关闭时能否通知父窗口? (在不同的域上?)
试图绕过 window.opener 在不同域上无法正常工作。
至少可以在子窗口关闭时以某种方式通知我吗?
【问题讨论】:
标签: javascript events browser
子窗口关闭时能否通知父窗口? (在不同的域上?)
试图绕过 window.opener 在不同域上无法正常工作。
至少可以在子窗口关闭时以某种方式通知我吗?
【问题讨论】:
标签: javascript events browser
您无法直接收到关闭窗口的通知,但您可以通过检查window.open() 返回的窗口对象引用上的closed 属性来确定子窗口何时关闭。
这是一个示例,它将在通过轮询closed 属性关闭子窗口后的 5 秒内显示警报:
var win = open('http://www.google.com');
var intervalId = setInterval(function() {
if (win.closed) {
clearInterval(intervalId);
alert('Window closed! Hoorah!');
}
}, 5000);
【讨论】:
closed 属性将不可用了。您可能需要检查弹出窗口的parent 属性
closed 仍然可用,因为该窗口属性允许跨域访问。见developer.mozilla.org/en-US/docs/Web/Security/…
两段代码的更好解决方案 1/ 在弹出窗口中:
$(window).bind('unload',
function(){
window.opener.PopupUnload(window)
})
2/ 在父级(主窗口)中:
function PopupUnload(wnd){
setTimeout(function(){ // setTimeout is for IE
if(wnd.closed)
alert('You just killed me...')
},10)
}
使用此代码,不会永远调用任何函数(使用 setInterval()),并且您可以区分关闭和刷新弹出窗口(发布/获取)
(在 IE8 和 FF3 中测试)
【讨论】:
window.opener.PopupUnload 调用将失败。