window.close()的;页面更改或刷新时无法正常工作

时间:2010-10-13 14:41:19

标签: javascript

我有这个小功能来打开/关闭弹出播放器:

function popuponclick(popup)
{
  my_window = window.open("folder/player-itself.htm", popup, "width=350,height=150");  
}

function closepopup()
{
  my_window.close();
}

我从网站每个页面上的HTML锚点调用函数(想法是让玩家随时停止/启动)......现在......

它可以正常工作,直到我更改页面或刷新现有页面 - 然后窗口再也无法关闭。知道我错了吗?在FF和IE8中测试过,行为相同。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

当你重新加载原始窗口(或标签)时,关于旧窗口的一切都消失了,被炸成了数字空洞,永远不会被再次看到或听到。位字面上分解为虚无。

因此,当你打开第二个窗口时你非常喜爱的“my_window”引用已经消失了,新加载的窗口中的“my_window”变量什么都没有。它的名字只是对现在死页中变量的嘲弄。

处理这种情况的唯一方法是弹出窗口定期通过“window.opener”进行检查,以查看其父页面是否被某些interloper粗略地替换。如果发生这种情况(并且新页面来自同一个域),则弹出页面可以在新页面的“my_window”变量中恢复对自身的引用。

编辑 - 好的,这是一个样本。你可以在弹出页面中输入这样的内容,而不是启动页面:

<script>
  var checkParent = setInterval(function() {
    try {
      if (window.opener && ('my_window' in window.opener))
        window.opener.my_window = window;
    }
    catch (_) {
      // clear the timer, since we probably won't be able to fix it now
      clearInterval(checkParent);
    }
  }, 100);
</script>

这可能非常接近。