1

我一直在寻找解决问题的方法,但只能找到拼图的一部分,而无法将它们联系起来。我有一个可以打开多个其他窗口的窗口(它本身是主窗口的子窗口)。我希望在关闭父级时关闭子级窗口,听起来很简单吧?

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

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

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

谢谢你。

4

2 回答 2

0

关于什么

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();
};
于 2012-03-15T16:51:43.233 回答
0

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

  • 不要使用多个浏览器窗口,而是设置页面样式以显示所有对话;正如@Gats 建议的那样。好的,如果您希望在子窗口中导航时持久输入父“窗口”的输入,这将在一定程度上限制您。
  • 不要进行刷新回发以卸载父级。改用 Ajax 将数据发送到应用程序服务器
  • 您不能存储(窗口)对象,只能存储字符串。打开一个窗口时,你可以给它一个“目标”名称,任何其他window.open具有相同目标(名称)的都将使用已经打开的那个。有了它,您可以参考您自己没有打开的窗口 - 并关闭它们。见https://stackoverflow.com/a/563478/1048572
于 2012-03-15T17:33:17.300 回答