Javascript 父页面更改后的窗口引用

Javascript 父页面更改后的窗口引用,javascript,window,Javascript,Window,我正在使用window.open函数打开命名窗口: win = window.open("xxx.html", "mywin"); 之后,我从父窗口移动到另一个页面,我想确定名为“mywin”的窗口是否仍然打开 如果我在父页面中,我会使用win.closed,但是由于我更改了页面,我丢失了引用。我怎样才能取回它?:) 谢谢。我可以想出两种可能值得尝试的方法 首先,可以让子窗口与父窗口对话,而不是让父窗口与子窗口对话。当页面转换时,父窗口将丢失对子窗口的引用,而子窗口应仍然能够通过window.

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

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

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

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


谢谢。

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

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

父窗口(所有页面)

子窗口

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可以足够大,看起来像一个完整的页面。这是一个令人讨厌的黑客式解决方案,但也应该有效。

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

win = window.open("xxx.html", "mywin");
然后,当您要关闭窗口时:

mywin.close();

“之后,我从父窗口移动到另一个页面,”-您是从服务器刷新页面还是打开新窗口?@NM我没有打开新窗口。我正在更改打开子窗口的页面的位置。让孩子与家长对话是个好主意:)。谢谢
mywin.close();