在Web应用程序中,我有一个可选的弹出窗口,其中正在加载日志记录内容。此窗口使用window.open()
通过Javascript打开。
用户通常打开应用程序的多个选项卡,我的目的是始终重复使用相同的弹出窗口(如果当前打开),无论从哪个选项卡触发弹出窗口。为此,我使用与此类似的代码打开弹出窗口:
<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
所有包含来自同一域的内容的选项卡打开/重新加载单个共享弹出窗口(即目标命名空间似乎是每个域的本地名称)。
包含file://
个网址内容的所有标签都会重复使用与标签相同的弹出式窗口,其中包含指向本地内部网的http://
个网址的内容。
Firefox 46.0.1
所有包含来自同一域的内容的选项卡打开/重新加载单个共享弹出窗口(即目标命名空间似乎是每个域的本地名称)。
包含file://
个网址内容的所有标签都使用自己的单个共享弹出窗口(即file://
网址似乎有自己的目标命名空间。)
Edge 20.10240.16384.0
行为不一致:在我的大多数测试中,Edge表现得像Firefox,但偶尔也会像Chrome一样
我暂时忽略Edge没有问题。
Chrome 50.0.2661.94
每个选项卡打开或重新加载自己的弹出窗口(即目标命名空间似乎是每个选项卡本地)
Safari 9.1
每个选项卡打开或重新加载自己的弹出窗口(即目标命名空间似乎是每个选项卡本地)
顺便说一句,在所有这些浏览器中,行为不依赖于弹出窗口是否由于用户交互而启动:在通过body onload()
启动弹出窗口的情况与行为相同它通过button onclick()
加载的位置。
[这里是我认为与问题无关的其他背景信息,但谁知道...... ;-)
实际上,我们的应用程序不直接打开弹出窗口,而是使用log4javascript打开日志窗口(或者在Chrome的情况下:多个日志记录窗口)。我愿意扩展log4javascript代码来处理这个并向维护者发送补丁,但为了做到这一点,我需要解决上面描述的基本问题]