首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在iframe中使用window.open的唯一弹出窗口

在iframe中使用window.open的唯一弹出窗口
EN

Stack Overflow用户
提问于 2016-08-15 03:40:52
回答 2查看 2.6K关注 0票数 15

我有一个打开窗口的iFrame (urluniqueIDwindowparams)。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上仍然没有运气。如果有人能为此工作,这将是非常感谢的。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-25 02:48:14

Stack Overflow用户

发布于 2016-08-23 20:30:17

我在您的代码中看到了几个问题:

  1. 您正在调用一个嵌套在另一个函数中的函数来关闭窗口,该函数永远不会被触发,因为此时不能调用父函数。 函数openWin(){ /*代码*/ }函数closeWin(){ /*代码*/ }
  2. 为了确保浏览器兼容关闭窗口,我强烈建议在父窗口生成的弹出窗口内设置和调用一个可注入函数。

示例以插入一个函数:

代码语言:javascript
运行
复制
myWindow.document.write(
        "<p>This is 'myWindow'</p>"
        +"<script>"
        +"function closeWindow()\{" // sample injected function
        +"window.close();"
        +"\}<\/script>"
    ); 

完整的例子:

代码语言:javascript
运行
复制
<!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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38949019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档