父页面更改后的窗口引用

时间:2010-07-06 07:08:29

标签: javascript window

我正在使用window.open函数打开一个命名窗口:

win = window.open("xxx.html", "mywin");

之后我从父窗口移动到另一个页面,我想确定名为“mywin”的窗口是否仍然打开。

如果我在父页面中,我会使用win.closed,但由于我更改了页面,我丢失了引用。我怎样才能找回来? :)

感谢。

2 个答案:

答案 0 :(得分:4)

我可以想到两种可能值得尝试的方法......

首先,您可以通过让子窗口与父窗口而不是子窗口的父窗口进行对话来实现此目的。虽然父窗口在页面转换时将丢失对子节点的引用,但子节点仍应能够通过window.opener返回到新页面(只要它仍在同一域中)。孩子可以使用设置间隔来访问打开窗口并设置“仍然打开”状态。您必须以这样的方式对其进行编码,以便能够在转换加载期间处理没有文档但是它可以工作。代码大致如下所示,但您可以通过处理子项的父项加载和卸载事件并仅在转换之间运行计时器来改进这一点。

父窗口(所有页面)

var childStatus = "unknown";

子窗口

var timerHandler;

funciton ChildCallBack()
{
  try
  {
    window.opener.childStatus = "open";
  }
  catch(e)
  {
  }
}

timerHandler = window.setInterval(ChildCallBack, 100);

function window_onclose()
{
  try
  { 
    window.clearInterval(timerHandler);
    window.opener.childStatus = "closed";
  }
  catch(e)
  {
  }
}

window.onclose = window_onclose;

其次,理想情况下,作为最后的手段,另一个非常可怕的替代方案是使用iframe。将转换页面放在iframe中,这样实际的主页面就不会改变,因此可以保持对子项的引用。 iframe可能足够大,看起来像整页。这是一个讨厌的黑客解决方案,但也应该工作。

答案 1 :(得分:0)

尝试使用window name(window.open方法的第二个参数)作为变量名称:

win = window.open("xxx.html", "mywin");

然后当你想要关闭窗口时:

mywin.close();