2011-06-07 191 views
10

我打開一個彈出窗口檢查一個彈出窗口關閉

var popup = window.open('...', '...'); 

這個JavaScript在控制定義。這個控件然後從網頁中使用。我想重新加載當彈出窗口關閉時打開此彈出窗口的頁面。

基本上用戶需要在彈出窗口中輸入一些教派並提交。這些面值然後存儲在用戶會話中。當用戶點擊提交時,我正在關閉彈出窗口,同時要刷新打開此彈出窗口的窗口,以重新獲取用戶在彈出窗口中所做的更新。

我試圖做

var popup = window.open('...','...'); 
if (popup) { 
    popup.onClose = function() { popup.opener.location.reload(); } 
} 

我想我做錯了怎麼把這個不似乎是工作。

爲了測試這個問題,我甚至試過這個,但沒有出現警報。

if (popup) { 
    popup.onclose = function() { 
    alert("1.InsideHandler"); 
    if (opener && !opener.closed) { 
     alert("2.Executed."); 
     opener.location.reload(true); 
    } else { 
     alert("3.NotExecuted."); 
    } 
    } 
} 
+0

你可以/你嘗試過使用莫代爾彈出? – atrljoe 2011-06-07 12:11:12

+0

你不想提交表單的模式窗口,除非你把它提交給一個iFrame – mplungjan 2011-06-07 12:12:13

回答

6

這是我的建議。

在彈出

<script type="text/javascript"> 

function reloadOpener() { 
    if (top.opener && !top.opener.closed) { 
    try { 
     opener.location.reload(1); 
    } 
    catch(e) { } 
    window.close(); 
    } 
} 
window.ununload=function() { 
    reloadOpener(); 
} 
</script> 
<form action="..." target="hiddenFrame"> 
</form> 
<iframe style="width:10px; height:10px; display:none" name="hiddenFrame" src="about:blank"></iframe> 

然後在服務器進程返回

<script> 
top.close(); 
</script> 

老建議

還有就是在彈出窗口中沒有稱爲彈出的變量。 嘗試

var popup = window.open('...','...'); 
if (popup) { 
    popup.onclose = function() { opener.location.reload(); } 
} 

或與測試:

popup.onclose = function() { if (opener && !opener.closed) opener.location.reload(); } 

PS:onclose並不被所有的瀏覽器都支持

PPS:location.reload需要一個布爾值,如果你想不加真從緩存加載 如opener.location.reload(1);

+0

窗口的彈出打開時被立即重新加載。 – 2011-06-07 12:16:49

+0

順便說這將是OnClose中,小寫字母C.並非所有的瀏覽器 – mplungjan 2011-06-07 12:21:24

+0

測試我使用這個>>> popup.onClose =功能支持(){如果(首戰&&!opener.closed){警報(「執行的.. 。「); opener.location.reload(); }}但警報從不顯示。 – 2011-06-07 12:25:01

0

相反,您應該使用模式對話框,如

var popup = window.showModalDialog("page.html", "", params); 

這會阻止您在此行直到對話框關閉。

在你的page.html的某個地方,你可以編寫一些javascript來設置window.returnValue這就是放置彈出變量的地方。

+0

除了它是棘手的提交表單的模式窗口,除非它有一個iframe提交 – mplungjan 2011-06-07 12:12:48

+0

並且什麼阻止他們將它在iframe中? – 2011-06-07 12:13:57

+0

要求是使用無模 – 2011-06-07 12:19:03

1

試試這個:

window.opener.location.reload(true); 

進入彈出關閉

window.opener.location.href = window.opener.location.href; 
window.close(); 
0

好之前,所以你要做的就是如下。

創建方法「setWindowObjectInParent」然後調用,在彈出。 var popupwindow;

function setWindowObjectInParent(obj) 
{ 
popupwindow = obj; 
} 

現在你有一個可以調用焦點的對象。

所以,在彈出的添加

$(window).unload(function(){ 
window.opener.setWindowObjectInParent(); 
}); 
window.opener.setWindowObjectInParent(window); 

這將取消設置OBJ當彈出窗口關閉,打開時設置的對象。

因此,你可以檢查你的彈出定義,然後調用焦點。