我有一个页面 A,它创建一个带有页面 B 的窗口。
页面 B 询问用户一些数据,将它们插入数据库,然后自行关闭。插入后,我试图使页面 A 自动刷新(它既可以来自 A 看到 B 已关闭,也可以是由 B 本身在关闭之前(或之后?)触发的函数)
我怎样才能做到这一点?
我有一个页面 A,它创建一个带有页面 B 的窗口。
页面 B 询问用户一些数据,将它们插入数据库,然后自行关闭。插入后,我试图使页面 A 自动刷新(它既可以来自 A 看到 B 已关闭,也可以是由 B 本身在关闭之前(或之后?)触发的函数)
我怎样才能做到这一点?
JavaScriptwindow.open()
返回对打开窗口实例的引用。您可以使用它来设置onunload
事件处理程序,如下所示:
var hWndB = window.open('somepage.php'),
hWndA = window.self;
hWndB.onunload = function(){ hWndA.location.reload(); }
您可以使用onunload
事件和window.opener
. 例如。
window.addEventListener('unload', function() {
window.opener.location.reload();
}, false);
或者您可以使用 jquery,这样您就不会遇到任何跨浏览器兼容性问题:
$(window).on('unload', function() {
window.opener.location.reload();
});
还有另一个onbeforeunload
你可能想看看的事件。
编辑
对于较旧的浏览器,您可以使用@CORRUPT 在评论中提供的技巧:window.open() 在第二次调用时返回 undefined 或 null
变体“A看到B关闭”:
//winb is global variable
winb=window.open(blah blah); //Existing: A opens B
window.setTimeout(checkWinB,1000);
function checkWinB() {
if (winb.closed()) refreshMySelf();
else window.setTimeout(checkWinB,1000);
}
变体“B踢A”:
opener.rerfreshMySelf();
window.close() //Existing: B closes
两种变体都需要refreshMySelf()
刷新页面的功能。如何做到这一点取决于页面机制,但非 AJAX 页面的起点是
function refreshMySelf() {
location.reload();
}