更换窗口时window.open()的window.opener问题

时间:2012-10-12 08:40:33

标签: javascript window.opener

我有一个Web应用程序,其中第1页使用

打开一个弹出窗口
window.open(myUrl, "fixedApplicationTargetId", "");

然后第2页使用相同的目标

调用window.open覆盖同一个弹出窗口
window.open(anotherUrl, "fixedApplicationTargetId", "");

此时,页面#1最初创建的弹出窗口的内容显示了第2页创建的新内容。到目前为止,任何浏览器都很好。

然后弹出窗口自动检测上次打开弹出窗口的用户并使用window.opener更新内容。在调用window.open之前,页面#1和页面#2都创建一个全局变量globalPageId并分别指定一个唯一的数字。弹出窗口检查window.opener.globalPageId的值,并检测上次更新弹出内容的窗口。

这就是事情崩溃的地方:上面使用chrome和firefox工作正常,每次使用window.open更新内容时,会在弹出窗口中更新window.opener。相反,IE和Opera总是将弹出窗口.opener指向使用window.open的第一个窗口。

任何建议,在多个页面在同一目标上调用window.open的上下文中,如何从弹出窗口检测哪个窗口最后打开窗口?

1 个答案:

答案 0 :(得分:1)

window.opener应该是可读写的(Internet Explorer 3除外),因此您可以自己将其设置为适当的窗口。但是,某些浏览器会限制此操作,并且只允许将opener设置为nullprevent security issues

另一种解决方案是使用自定义属性而不是opener。你可以手动设置它:

window.open(myUrl, "fixedApplicationTargetId", "").realOpener = window;

然后在代码的其余部分使用window.realOpener.globalPageId代替window.opener.globalPageId