当弹出窗口关闭时刷新父窗口

10

当弹出窗口关闭时,有没有办法在不向弹出窗口添加任何JavaScript代码的情况下刷新父窗口?

我有一个名为parent.php的页面,在这个页面上,用户可以点击“打开弹出窗口”来打开一个弹出窗口。这个弹出窗口显示一些Flash内容,对我来说不可能添加类似于

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

有没有其他方法可以实现这个目标? 谢谢


1
你尝试过在父窗口中的处理程序中添加onunload处理程序来处理弹出窗口的句柄吗? - Gordon
like shown by benhowdle below - Gordon
请查看此链接:http://stackoverflow.com/questions/18321323/submit-form-reload-parent-and-close-child/36855748#36855748,可能会对某些人有所帮助。 - NoNaMe
4个回答

17

为了使这在所有主要浏览器中工作,您需要在弹出窗口中处理unload事件处理程序,并在主窗口中重新加载。在主窗口中添加以下内容:

function popUpClosed() {
    window.location.reload();
}
在弹出窗口中:
window.onunload = function() {
    if (window.opener && !window.opener.closed) {
        window.opener.popUpClosed();
    }
};

那么通常情况下,如果你需要你的代码在所有浏览器中运行,特别是IE浏览器,答案通常是否定的。


当URL被保护时,也就是https:意味着它不会要求出现一个带有“确实要提交数据”的窗口,其中包含重试和取消按钮吗? - changeme

5
我确定您只需将此内容添加到parent.php文件中即可:

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

抱歉,我一时想不起来选择器了!感谢你指出这个问题,Gordon。 - benhowdle89
这在IE中不起作用。我的答案会起作用。请停止点赞它。 - Tim Down
IE将忽略从另一个窗口分配的onunload属性。您只能从弹出窗口内部执行此操作。如果您不相信,请尝试一下(我使用的是IE 7,我相当确定IE 8的行为也是如此)。 - Tim Down
@benhowdle89:抱歉有些激动。这与个人无关。我只是对SO投票的随意性感到沮丧,因为它通常不能奖励实际的知识。 - Tim Down
抱歉,Tim,我无法阻止人们给这个答案点赞。 - benhowdle89
显示剩余3条评论

2

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.
}

1

我曾经遇到过类似的问题,无法检测父窗口中弹出窗口的关闭。我认为原因在于没有设置document.domain属性。

除了Tim Down的答案外,还可以像这样为窗口和弹出窗口都设置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();">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接