我有一个主页面(称为'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中的链接,它会使用现有的弹出窗口,但重新加载网站,因为他不知道弹出窗口已经打开。
有没有办法,我可以告诉其他主窗口弹出窗口的句柄,以便他们可以使用它?
感谢您的建议。
答案 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
。