我有一个打开窗口的iFrame (url
,uniqueID
,windowparams
)。iFrame位于单个页面应用程序上,并托管在另一台服务器上。每次我刷新或更改页面,然后返回到IFrame页面,然后尝试启动相同的window.open
。它不是刷新已经打开的窗口,而是创建同一个窗口的实例。在检查每个弹出窗口的window.name
时,它返回与其window name
相同的uniqueID
。如果url是空的,它的行为就像预期的那样。但是当设置url时,它会创建窗口的一个新实例。
window.open
被摧毁时,会不会有这样的行为?更新:
Mike通过为iFrame源代码添加沙箱属性成功地修复了Webkit浏览器的行为。现在,window.open
方法按预期工作,而不是为同一个window.name
的同一个窗口创建新实例。
然而,Mike在Firefox上仍然没有运气。如果有人能为此工作,这将是非常感谢的。
iFrame的Webkit浏览器行为,其属性在下面的视频中。
确保父文件,即使在刷新时仍然可以检测到已打开的同名弹出。xXRjY8Ow
火狐行为的iFrame与桑盒属性在下面的视频。
刷新父窗口时,浏览器无法检测已打开的弹出窗口,并使用相同的
window.name
创建弹出窗口的另一个实例。https://youtu.be/uHaDveW1Sd0
有没有办法让Firefox像Webkit浏览器一样运行呢?
更新:
Mike发现在火狐中使用window.open中的空白url是正确的。但还是该如何解决这个问题。
更新:
约翰尼来了!呃迈克指的是另一个测试用例。尝试使用webkit浏览器和firefox。打开弹出窗口后,刷新页面,然后打开另一个弹出webkit浏览器将只有窗口的一个实例,但是firefox将创建一个新的实例。打开的弹出窗口上的console.log(window.name)
,您将得到“Mike”作为窗口名https://bug1295839.bmoattachments.org/attachment.cgi?id=8782242。
发布于 2016-08-25 02:48:14
发布于 2016-08-23 20:30:17
我在您的代码中看到了几个问题:
示例以插入一个函数:
myWindow.document.write(
"<p>This is 'myWindow'</p>"
+"<script>"
+"function closeWindow()\{" // sample injected function
+"window.close();"
+"\}<\/script>"
);
完整的例子:
<!DOCTYPE html>
<html>
<body>
<button onclick="openWin()">Open "myWindow"</button>
<button onclick="closeWin()">Close "myWindow"</button>
<script>
var myWindow;
function openWin() {
myWindow = window.open("", "myWindow", "width=200,height=100");
myWindow.document.write(
"<p>This is 'myWindow'</p>"
+"<script>"
+"function closeWindow()\{" // sample injected function
+"window.close();"
+"\}<\/script>"
);
}
function closeWin() {
if(!myWindow.closeWindow) {
setTimeout(closeWin,1000); // repeat if function not found
} else {
myWindow.closeWindow();
}
}
</script>
</body>
</html>
https://stackoverflow.com/questions/38949019
复制相似问题