1

我有一个 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 的值并检测哪个窗口最后更新了弹出内容。

这就是事情分崩离析的地方:上述内容适用于每次使用 window.open 更新内容时更新弹出窗口中的 window.opener 的 chrome 和 firefox。相反,IE 和 Opera 总是将弹出窗口 window.opener 指向第一个使用 window.open 的窗口。

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

4

1 回答 1

1

window.opener应该是可读写的(Internet Explorer 3 除外),因此您可以自己将其设置为适当的窗口。但是,有些浏览器会限制此操作,只允许设置openernull防止出现安全问题

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

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

然后在其余代码中使用window.realOpener.globalPageId而不是。window.opener.globalPageId

于 2012-10-12T10:06:15.557 回答