iframe/Popup 重定向开启器窗口

Posted

技术标签:

【中文标题】iframe/Popup 重定向开启器窗口【英文标题】:Iframe/Popup redirecting opener window 【发布时间】:2010-06-10 20:58:25 【问题描述】:

我有一个位于 x.com 的页面。此页面上有一个按钮,单击该按钮将启动一个新窗口(使用 javascript 的 window.open() 方法)到位于 z.com 的页面。弹出窗口做了一些事情,然后根据弹出窗口中定义的一些参数将原始窗口(打开器,x.com)重定向到不同的页面。

这在 Firefox/Chrome 中运行良好,但在 IE 中不行。在 IE(特别是 8,但我相信 7 也有这个问题)中,原始窗口(开启器)没有被重定向。相反,会出现一个新窗口并重定向该窗口。

我尝试了许多不同的方法来尝试使其正常工作,包括将弹出窗口更改为页面上加载的 iframe,并在弹出窗口/iframe 调用的开启器上设置一个函数。问题似乎是 IE 拒绝允许跨域站点通过 javascript 相互通信。

有没有办法解决这个问题?如何让父窗口根据弹出窗口或 iframe 中的参数重定向到页面?

编辑:

这里是一些示例代码:

在 domainA.com 的一个页面中,我有这个:

<img src='/images/test.png' onclick="window.open('http://www.domainB.com/item.aspx', 'name', 'width=100,height=100,menubar=no,status=no,toolbar=no');" />

在 domainB.com 上的 item.aspx 中,我在 javascript 中有这个:

opener.location.href = 'http://www.somethingelse.com/';

在 Firefox/Chrome 中,这可以正常工作。在 IE 中,当 domainB.com 尝试在开启程序(也称为父窗口,即 domainA.com)上设置 location.href 时,它会打开一个新窗口,这不是我想要的。我希望它将开启器(父窗口)重定向到我指定的 URL。

巴拉

【问题讨论】:

【参考方案1】:

您好,我通过执行以下操作解决了我的问题 而不是使用 window.opener.location = "....

使用 window.opener.document.location = "url"。这对我有用。

另一件事是确保您没有从 http 重定向到 https,这也会导致它中断。

干杯

【讨论】:

获取权限被拒绝消息 :(【参考方案2】:

我最终通过以下方式解决了它:

我在我的主页上添加了一个 iFrame。 iFrame 与我的弹出窗口位于同一域中。 iFrame 包含一个按钮,单击该按钮将启动弹出窗口。

弹出窗口完成了它,然后将 iFrame 的哈希标记更改为类似 #change 的内容(因此 url 将是 www.whatever.com/iframe.aspx#change)。在 iFrame 的 javascript 中,我有一个循环来检查哈希以查看它是否显示“更改”,如果是,它将父页面重定向到我想要的任何地方。这很好用。

因为我不希望每个页面都出现无限循环,所以我进行了浏览器检查,以便这只适用于 IE。对于所有其他浏览器,我只使用 window.opener 即可。

巴拉

【讨论】:

以上是关于iframe/Popup 重定向开启器窗口的主要内容,如果未能解决你的问题,请参考以下文章

usb重定向

宝塔的nginx开启强制https老是无限重定向

Javascript - 从弹出窗口重定向父窗口

重定向点滴

登录后如何重定向到razorpay 支付弹出窗口?

联系表格 7 感谢您在新窗口上重定向页面