我有一个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的上下文中,如何从弹出窗口检测哪个窗口最后打开窗口?
答案 0 :(得分:1)
window.opener应该是可读写的(Internet Explorer 3除外),因此您可以自己将其设置为适当的窗口。但是,某些浏览器会限制此操作,并且只允许将opener
设置为null
到prevent security issues。
另一种解决方案是使用自定义属性而不是opener
。你可以手动设置它:
window.open(myUrl, "fixedApplicationTargetId", "").realOpener = window;
然后在代码的其余部分使用window.realOpener.globalPageId
代替window.opener.globalPageId
。