2010-11-24 202 views
10

当没有向弹出窗口添加任何JavaScript代码时关闭弹出窗口是否有任何方法可以刷新父窗口?当弹出窗口关闭时刷新父窗口

我有一个页面parent.php,用户可以点击“打开弹出”打开一个弹出窗口。该弹出窗口显示了一些Flash内容和我不可能像

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

添加一些弹出窗口页面标记。

有没有其他方法可以实现这一点? 感谢

+1

你试图在onunload的处理程序添加到从父窗口的弹出式窗口的句柄? – Gordon 2010-11-24 14:28:38

+0

@戈登 - 对不起? – Kay 2010-11-24 14:30:10

+0

like benhowdle below below – Gordon 2010-11-24 14:42:19

回答

17

为了使这项工作在所有主要浏览器,你需要处理在弹出unload事件处理程序,在主窗口中重新加载。在主窗口,添加

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

在弹出:

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

所以回答你的问题一般是否定的,如果你需要你的代码在所有浏览器的工作,特别是IE 。

6

我敢肯定,你可以再补充这parent.php:

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

有类似的问题检测父窗口中的关闭弹出窗口。我认为原因是 没有设置document.domain属性。

任何方式加入到添下回答了窗口和弹出这样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();"> 
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. 
}