将刷新请求发送到浏览器中打开的另一个页面

时间:2013-05-31 08:35:24

标签: php javascript refresh

我有一个页面A,用页面B创建一个窗口。

页面B询问用户一些数据,将它们插入数据库然后自行关闭。 在插入之后,我正在尝试自动刷新页面A(既可以是A看到B已关闭,也可能是由B本身在关闭之前(或之后)触发的功能)

我该怎么做?

3 个答案:

答案 0 :(得分:2)

JavaScript window.open()返回对已打开窗口实例的引用。您可以使用它来设置onunload事件处理程序,如下所示:

var hWndB = window.open('somepage.php'),
    hWndA = window.self;

hWndB.onunload = function(){ hWndA.location.reload(); }

答案 1 :(得分:1)

您可以使用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() returns undefined or null on 2nd call

答案 2 :(得分:0)

变体“看见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();
}