检查弹出窗口是否关闭

IT技术 javascript asp.net internet-explorer-9
2021-02-23 07:07:25

我正在打开一个弹出窗口

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个回答

这是我的建议。

在弹出窗口中你应该有:

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

为了测试我使用了这个 >>> popup.onClose = function() { if (opener && !opener.closed) { alert("Executed..."); opener.location.reload(); 但警报从未显示。
2021-05-04 07:07:25
当弹出窗口打开时,窗口会立即重新加载。
2021-05-06 07:07:25
将 onClose 更改为 onclose 并确保您使用支持此功能的浏览器
2021-05-07 07:07:25
对不起,伙计,我真的不知道为什么我不赞成这个。也许我只是累了,按错了。除非答案被编辑,否则我无法撤消我的投票。对于那个很抱歉。
2021-05-09 07:07:25
顺便说一下,它是关闭的,小写的 C。并非所有浏览器都支持
2021-05-11 07:07:25

试试这个:

window.opener.location.reload(true);

或者

关闭前进入弹窗

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

好的,你要做的如下。

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

function setWindowObjectInParent(obj)
{
popupwindow = obj;
}

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

所以在弹出窗口中添加

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

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

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

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

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

这将在此行停止,直到对话框关闭。

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

更新

Window.showModalDialog()现在已过时

除了在模态窗口中提交表单很棘手,除非它有一个 iframe 提交
2021-04-29 07:07:25
要求是使用无模型
2021-04-29 07:07:25
什么阻止他们将它放在 iframe 中?
2021-05-06 07:07:25