【问题标题】:Check if a popup window is closed检查弹出窗口是否关闭
【发布时间】:2011-09-10 00:43:54
【问题描述】:

我正在用

打开一个弹出窗口
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.");
    }
  }
}

【问题讨论】:

  • 您/您是否尝试过使用模态弹出窗口?
  • 除非您将表单提交到 iFrame,否则您不想在模式窗口中提交表单

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


【解决方案1】:

这是我的建议。

在弹出窗口中你应该有:

<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);

【讨论】:

  • 当弹出窗口打开时,窗口会立即重新加载。
  • 顺便说一句,它是onclose,小写C。并非所有浏览器都支持
  • 为了测试我使用了这个 >>> popup.onClose = function() { if (opener && !opener.closed) { alert("Executed..."); opener.location.reload(); } } 但警报永远不会显示。
  • 将 onClose 更改为 onclose 并确保您使用支持此功能的浏览器
  • 对不起,我真的不知道为什么我投了反对票。也许我只是累了,点错了。除非编辑了答案,否则我无法撤消我的投票。对此感到抱歉。
【解决方案2】:

相反,您应该使用这样的模式对话框

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

这会让你停在这一行,直到对话框关闭。

然后在 page.html 中的某处编写一些 javascript 代码来设置 window.returnValue,这就是放置弹出变量的位置。

更新

Window.showModalDialog() 是now obsolete

【讨论】:

  • 除非在模态窗口中提交表单很棘手,除非它有 iframe 要提交到
  • 还有什么可以阻止他们将它放在 iframe 中?
  • 要求是使用无模
【解决方案3】:

好的,你的操作如下。

创建一个方法“setWindowObjectInParent”,然后在弹出窗口中调用它。 var popupwindow;

function setWindowObjectInParent(obj)
{
popupwindow = obj;
}

现在您有了一个可以称为焦点的对象。

所以在弹出窗口中添加

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

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

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

【讨论】:

    【解决方案4】:

    试试这个:

    window.opener.location.reload(true);
    

    关闭前进入弹窗

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      相关资源
      最近更新 更多