【问题标题】:window reference after parent page changed父页面更改后的窗口引用
【发布时间】:2010-07-06 07:08:29
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

  • "之后我从父窗口移动到另一个页面," - 你是从服务器刷新页面还是打开一个新窗口?
  • @NM 我没有打开新窗口。我正在更改打开子窗口的页面的位置。

标签: javascript window


【解决方案1】:

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

首先,您可以通过让子窗口与父窗口而不是父窗口与子窗口对话来解决此问题。虽然当页面转换时父窗口将失去对子窗口的引用,但子窗口仍然应该能够通过 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 可能足够大,看起来像一整页。这是一个讨厌的黑客解决方案,但也应该可以工作。

【讨论】:

    【解决方案2】:

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

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

    然后当你想关闭窗口时:

    mywin.close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      相关资源
      最近更新 更多