从Javascript关闭子窗口

Closing children windows from Javascript

本文关键字:窗口 Javascript      更新时间:2023-09-26

我一直在到处寻找问题的解决方案,但只能找到拼图的碎片,无法将它们连接起来。我有一个窗口(它本身是主窗口的子窗口),可以打开多个其他窗口。我希望孩子们的窗口在家长关闭时关闭,听起来很简单,对吧?

这是一个难题,我的父窗口在打开子窗口时会进行回发,所以我保留的任何句柄数组(也是对象)都不会持久存在。我已经研究过序列化和反序列化这个数组,并将其存储在一个隐藏字段中,但这似乎不是最好的解决方案。我也无法访问正在打开的窗口的父级。

除了Javascript,服务器端的代码是用C#编写的,我使用的是asp.net。有什么合理的解决方案吗?我还应该提到,我正在使用的代码早在我使用它之前就由多个不同的人编写,所以我想添加到它中,而不是改变它的大部分工作方式。

最后,我知道在这里发布我的代码通常是个好主意,但我只是使用var win = window.open来执行窗口打开任务。

谢谢。

好吧,然后我看到了解决这个问题的三种方法:

  • 不要使用多个浏览器窗口,但要设置页面样式以显示所有对话;正如@Gats建议的那样。好吧,如果您希望在子窗口中导航时父"窗口"的输入保持不变,这将在一定程度上限制您
  • 不要通过刷新回发来卸载父级。使用Ajax将数据发送到应用程序服务器
  • 不能存储(窗口)对象,只能存储字符串。当打开一个窗口时,您可以给它一个"目标"名称,任何其他具有相同目标(名称)的window.open都将使用已经打开的名称。这样,你就可以引用你自己没有打开的窗口,然后关闭它们。看见https://stackoverflow.com/a/563478/1048572

怎么样

var wins = [];
function newChildWindow(...) {
    wins.push(window.open(...));
}
window.onuload = function() {
    for (var i=0; i<wins.length; i++)
        if (!wins[i].closed)
            wins[i].close();
};