【问题标题】:Refresh parent window when the pop-up window is closed弹出窗口关闭时刷新父窗口
【发布时间】:2011-05-15 03:32:21
【问题描述】:

有什么方法可以在弹出窗口关闭时刷新父窗口而不向弹出窗口添加任何 javascript 代码?

我有一个页面 parent.php,用户可以在该页面上单击“打开弹出窗口”来打开一个弹出窗口。此弹出窗口显示一些 Flash 内容,我无法添加类似

的内容
window.onunload = function(){ 
  window.opener.location.reload(); 
}; 

到弹出窗口页面标记。

还有其他方法可以实现吗? 谢谢

【问题讨论】:

标签: javascript jquery


【解决方案1】:

要在所有主流浏览器中使用此功能,您需要处理弹出窗口中的unload 事件处理程序并在主窗口中进行重新加载。在主窗口中,添加

function popUpClosed() {
    window.location.reload();
}

在弹出窗口中:

window.onunload = function() {
    if (window.opener && !window.opener.closed) {
        window.opener.popUpClosed();
    }
};

因此,如果您需要您的代码在所有浏览器(尤其是 IE)中运行,那么您的问题的答案通常是否定的。

【讨论】:

  • 当 URL 安全时意味着 https:它不是要求一个带有“真的要提交数据”重试和取消按钮的窗口吗?
【解决方案2】:

我确定您可以将其添加到 parent.php:

var myPop = "pop up window selector"
myPop.onunload = function(){ 
  location.reload(); 
}; 

【讨论】:

  • +1 但可以将 var myPop = "pop up window selector" 更改为 var myPop = window.open(); 以使示例更清晰
  • 对不起,我想不出头顶的选择器!感谢您指出戈登
  • 这在 IE 中不起作用。我的回答会。请停止投票。
  • IE 将忽略从另一个窗口分配的onunload 属性。您只能从弹出窗口中执行此操作。如果您不相信我,请尝试一下(我有 IE 7,我相当肯定 IE 8 的行为相同)。
  • @benhowdle89: 很抱歉冒犯了。这不是私人的。我只是对 SO 投票的随机性以及它通常不会奖励实际知识感到愤怒。
【解决方案3】:

Tim Down 方法的问题在于它没有回答最初的问题。要求是您不能在弹出窗口中添加任何代码。

我发现的一个解决方案虽然不是特别优雅,但在我测试过的所有浏览器上都有效。

您将简单地连续轮询新创建的窗口对象,检查它是否仍然打开。

在父窗口上:

  var register;
  var poll;

  function isOpen(){
      if(register.closed){alert("Closed!"); clearInterval(poll);}
  }


  function create(){

      register = window.open("http://www.google.com","register","width=425,height=550");
      poll=setInterval("isOpen()",100); //Poll every 100 ms.
}

【讨论】:

    【解决方案4】:

    在检测父窗口中的关闭弹出窗口时遇到了类似的问题。我认为原因是 在不设置 document.domain 属性。

    以任何方式添加到 Tim Down 回答 window 和 popup 的 document.domain 属性,如下所示:

        <script type="text/javascript">
            document.domain='<?=$_SERVER['SERVER_NAME']?>';
        </script> 
    

    而不是

     window.onunload = function() {
         if (window.opener && !window.opener.closed) {
            window.opener.popUpClosed();
         }
     };
    

    我在弹窗中使用:

         <body onunload="window.opener.popUpClosed();">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 2011-01-19
      相关资源
      最近更新 更多