在另一个选项卡中使用现有窗口

时间:2011-04-26 08:44:06

标签: javascript window

我有一个主页面(称为'main.html'),上面有一个链接,我可以用它打开一个弹出窗口或关注弹出窗口(如果已存在):var test; if (test == null || test.closed) test = window.open('test.html','test','width=800,height=600,location=0'); else test.focus();

运行正常,但问题出现了:如果用户在浏览器中多次打开主页,请单击主#1中的链接,然后单击主#2中的链接,它会使用现有的弹出窗口,但重新加载网站,因为他不知道弹出窗口已经打开。

有没有办法,我可以告诉其他主窗口弹出窗口的句柄,以便他们可以使用它?

感谢您的建议。

2 个答案:

答案 0 :(得分:0)

这将需要您能够访问所有其他选项卡中的主窗口,以检查是否有任何人打开了弹出窗口。到目前为止,我知道获取窗口引用的唯一方法是从函数window.open返回的引用。

不允许javascript访问其他窗口和标签除了打开窗口/标签的窗口内部是出于安全考虑。想象一下,如果javascript可以浏览所有标签并运行功能。这将是一个相当大的安全风险。

答案 1 :(得分:0)

如果两个“主窗口”彼此独立地打开,则他们无法访问彼此的变量。

然而,您可以使用window.open获取对“test”窗口的引用,然后检查您在“test.html”中设置的变量是否已定义,以确定它是否已加载:

var test; 
if (!test || test.closed) {
  test = window.open('','test','width=800,height=600,location=0');
  if (test && !test.someVariable) {
    test.location.href = "test.html";
  }
} else 
  test.focus();

顺便说一句,请注意我在第一次检查时更改了test == null!test,因为该变量原来是undefined而不是null,所以test == null将导致false