0

在 Web 应用程序中,我有一个可选的弹出窗口,其中正在加载日志记录内容。该窗口通过 Javascript 使用window.open().

用户通常打开应用程序的多个选项卡,我的意图是始终重用相同的弹出窗口(如果当前打开),无论他们从哪个选项卡触发弹出窗口。为此,我使用与此类似的代码来打开弹出窗口:

    <script>
    function myFunction() {
        var myWindow = window.open("popup.html", "my_popup", "width=600,height=400,status,resizable");
    }
    </script>

这在 Firefox 和 IE 中运行良好 - 仅打开一个弹出窗口,并且我要记录的所有内容都被加载到该窗口中。


然而,Chrome 和 Safari 使用不同的弹出窗口,具体取决于启动弹出窗口的选项卡。

我假设 的第二个参数window.open()指定来自全局命名空间的目标名称,这似乎是大多数浏览器的情况。但是 Chrome 和 Safari 的行为就好像这些目标名称有特定于选项卡的命名空间,即选项卡 1 引用的“my_popup”指的是与选项卡 2 中的“my_popup”不同的目标。(为了使事情更复杂,选项卡已经“重复”似乎共享相同的命名空间,即它们确实重复使用相同的弹出窗口,但以其他方式创建的选项卡不会。)

有没有办法绕过 Chrome 和 Safari 的这种行为,并从用户可能打开的所有选项卡访问相同的弹出窗口?

还是我必须假设这是特定于浏览器的行为,似乎没有解决方法?


我已经用各种浏览器对此进行了测试:

IE 11.0.9600.18204
具有来自同一域的内容的所有选项卡打开/重新加载单个共享弹出窗口(即目标命名空间似乎是每个域的本地名称)。
包含来自 URL 的内容的所有选项卡重复使用与包含来自指向本地 Intranet 的 URLfile://的内容的选项卡相同的弹出窗口。http://

Firefox 46.0.1
具有来自同一域的内容的所有选项卡打开/重新加载单个共享弹出窗口(即目标命名空间似乎是每个域的本地名称)。
所有带有来自file://URL 的内容的选项卡都使用它们自己的单个共享弹出窗口(即file://URL 似乎有它们自己的目标命名空间)。

Edge 20.10240.16384.0
行为不一致:在我的大多数测试中,Edge 的行为都像 Firefox,但偶尔也像 Chrome。
我暂时忽略Edge没有问题。

Chrome 50.0.2661.94
每个选项卡都会打开或重新加载自己的弹出窗口(即目标命名空间似乎是每个选项卡的本地名称)

Safari 9.1
每个选项卡都会打开或重新加载自己的弹出窗口(即目标命名空间似乎是每个选项卡的本地名称)

顺便说一句,在所有这些浏览器中,行为并不取决于弹出窗口是否由于用户交互而启动:在弹出窗口通过 启动的情况body onload()和通过 加载弹出窗口的情况之间的行为是相同的button onclick()


[这里是我认为与问题无关的附加背景信息,但谁知道... ;-)
实际上,我们的应用程序不直接打开弹出窗口,而是使用 log4javascript 打开日志窗口(或在 Chrome 的情况下:多个日志记录窗口)。我愿意扩展 log4javascript 代码来处理这个问题并向维护者发送一个补丁,但是为了做到这一点,我需要解决上面描述的基本问题]

4

0 回答 0