2010-11-24 218 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. 
}