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

时间:2010-11-24 14:24:09

标签: javascript jquery

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

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

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

到弹出窗口页面标记。

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

4 个答案:

答案 0 :(得分:17)

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

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

在弹出窗口中:

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

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

答案 1 :(得分:5)

我确定你可以将它添加到parent.php:

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

答案 2 :(得分: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.
}

答案 3 :(得分: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();">