【发布时间】:2016-12-21 07:13:25
【问题描述】:
我有一个打开窗口的 iFrame (url,uniqueID,windowparams)。
iFrame 位于单页应用程序中并托管在另一台服务器中。
每次我刷新或更改页面然后返回 IFrame 页面,然后尝试启动相同的window.open。它不是刷新已经打开的窗口,而是创建同一个窗口的一个实例。检查每个弹出窗口的window.name 后,它返回与window name 相同的uniqueID。如果 url 设置为空白,则它的行为符合预期。但是当一个 url 被设置时,它会创建一个新的窗口实例。
- iFrame
window.open在被销毁时是否表现得像那样? - 我尝试在本地运行 iFrame 源,即使刷新后打开的窗口也能正常运行。
- 我在 IE、Firefox 和 Chrome 中尝试过,它返回了相同的行为。
更新:
Mike 通过为 iFrame 源添加沙箱属性成功修复了 Webkit 浏览器的行为。现在window.open 方法可以按预期工作,并且不会为同一window.name 的同一窗口创建新实例。
但是,Mike 仍然没有使用 Firefox。如果有人可以为此提供解决方法,将不胜感激。
下面视频中带有 sanboxed 属性的 iFrame 的 Webkit 浏览器行为。
看到父级,即使在刷新时仍然可以检测到已经打开的同名弹出窗口。 https://youtu.be/z5_xXRjY8Ow
下面视频中带有 sanboxed 属性的 iFrame 的 Firefox 行为。
刷新父窗口时,浏览器无法检测到已打开的弹出窗口,并使用相同的
window.name创建另一个弹出窗口实例。 https://youtu.be/uHaDveW1Sd0
有没有办法让 Firefox 像 Webkit 浏览器一样工作?
更新:
Mike 发现在 window.open 中使用空白 url 在 firefox 中表现正常。 不过还是怎么解决哈哈。
更新:
约翰尼来了! er Mike 表示另一个测试用例。
尝试使用 webkit 浏览器和 firefox。
打开弹出窗口后,刷新页面然后打开另一个弹出窗口
webkit 浏览器只会有一个你的窗口实例,但是 firefox 会创建一个新的。
console.log(window.name) 在打开的弹出窗口中,您将获得“Mike”作为窗口名称
https://bug1295839.bmoattachments.org/attachment.cgi?id=8782242
【问题讨论】:
-
Mike 应该提供一个minimal reproducible example
-
我在 Firefox 中的行为与在 Chrome 中的行为相同,只是位置上有一个小例外:Chrome 窗口在屏幕的左上角弹出,而在 Firefox 中,窗口在 iframe 上方弹出。在 Win10 电脑上测试。
-
Mike 添加了视频参考,以便您可以看到所需的参考。使用 fiddle 创建 iframe 的行为并没有达到预期
-
我是迈克的强烈愿望,希望将第三人称引用更改为单数...等等。
-
哈哈对不起老板,迈克认为迈克有严重的非法主义问题
标签: javascript firefox