检查弹出窗口是否已关闭

时间:2011-06-07 12:07:01

标签: javascript asp.net internet-explorer-9

我打开一个带有

的弹出窗口
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.");
    }
  }
}

4 个答案:

答案 0 :(得分:6)

这是我的建议。

你应该在弹出窗口中

<script type="text/javascript">

function reloadOpener() {
  if (top.opener && !top.opener.closed) {
    try {
      opener.location.reload(1); 
    }
    catch(e) {
    }
    window.close();
  }
}
window.onunload=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>

旧建议

弹出窗口中没有名为popup的变量。 尝试

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采用布尔值,如果不想从缓存加载,则添加true  如opener.location.reload(1);

答案 1 :(得分:1)

试试这个:

window.opener.location.reload(true);

关闭前弹出窗口

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

答案 2 :(得分:0)

相反,你应该使用像这样的模态对话框

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

这将阻止你在这一行,直到对话框关闭。

在你的page.html的某个地方,你会编写一些javascript来设置window.returnValue这就是弹出变量的位置。

答案 3 :(得分:0)

好的,你做的如下。

创建方法&#34; setWindowObjectInParent&#34;然后在弹出窗口中调用它。 var popupwindow;

function setWindowObjectInParent(obj)
{
popupwindow = obj;
}

现在你有了一个可以调用焦点的对象。

所以在弹出窗口中添加

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

这将在弹出窗口关闭时取消设置obj,并在打开时设置对象。

因此,您可以检查是否定义了弹出窗口,然后调用焦点。