2011-06-07 134 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当弹出窗口关闭,打开时设置的对象。

因此,你可以检查你的弹出定义,然后调用焦点。