【问题标题】:Send a refresh request to another page opened in the browser向浏览器中打开的另一个页面发送刷新请求
【发布时间】:2013-05-27 00:43:32
【问题描述】:

我的页面 A 与页面 B 创建了一个窗口。

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

我该怎么做?

【问题讨论】:

  • 可以通过 JavaScript window.onclose,不是吗?或者你试图只通过 PHP 做到这一点?
  • 好吧,但我怎样才能以这种方式寻址页面 A? (php或javascript都可以,编辑标签)

标签: php javascript refresh


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    var hWndB = window.open('somepage.php'),
        hWndA = window.self;
    
    hWndB.onunload = function(){ hWndA.location.reload(); }
    

    【讨论】:

      【解决方案3】:

      您可以使用onunload 事件和window.opener。例如。

      window.addEventListener('unload', function() {
         window.opener.location.reload();
      }, false);
      

      或者您可以使用 jquery,这样您就不会遇到任何跨浏览器兼容性问题:

      $(window).on('unload', function() {
         window.opener.location.reload();
      });
      

      还有另一个名为 onbeforeunload 的活动,您可能想看看。

      编辑

      对于较旧的浏览器,您可以使用@CORRUPT 在 cmets 中提供的 hack:window.open() returns undefined or null on 2nd call

      【讨论】:

      • window.opener 在某些cases 中不可靠。
      • 谢谢。我已将您的链接添加到答案:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      相关资源
      最近更新 更多