【问题标题】:Cross Origin - window popup (window.opener is null)Cross Origin - 弹出窗口(window.opener 为空)
【发布时间】:2015-05-22 07:03:09
【问题描述】:

我想做什么:

  1. 从用户点击打开新窗口的父窗口来源是第三方 URL(不同域)

  2. 用户在弹出窗口中进行身份验证,然后第三方在重定向页面上提交成功数据。 (比如推特)

  3. 我必须从子窗口 (PopUpWindow) 将数据发送回父窗口。

我做了什么

var windowReference= window.open('https://ThirdPartyURL', 'CrossDomain', 'width=840,scrollbars=yes,top=0');

window.parentMethod= function (input) {alert(input)}

窗口在新窗口中打开用户在重定向页面上获得身份验证并获得返回的数据 在重定向页面(子窗口)

window.opener.parentMethod(response);

在 Firefox 中它可以工作,但在 IE 中 window.opener 为空。原因是跨域。如果第三方 URL 在当前域中,则它可以正常工作,但如果其跨域 windowReference 为空 要让它工作,我必须更改 Internet Settings->Security->Check Enabled 在每台客户端机器上几乎不可能做到这一点。

我曾尝试使用 Postmessage,但它支持 IE10,在 IE8 和 9 中它支持 Iframe,而在我的情况下,第三方已禁用 IFRAME 嵌入。

谁能帮我解决这个问题。任何帮助将不胜感激

【问题讨论】:

    标签: javascript internet-explorer iframe cross-domain window.opener


    【解决方案1】:

    简短的回答:你不能。跨源策略的一个原因就是不允许你做你想做的事(所以另一个网站不会在你的网站上运行 js,反之亦然)。

    要解决这个问题,您需要找到另一种发送数据的方式(通常是服务器端 -> curl 请求)。

    【讨论】:

    • 一些网站按照您的建议进行操作。但有一件事我不知道如何关闭子窗口并将数据提交回父窗口,如果 m 使用 cur 请求或任何其他方式(在服务器端使用)
    猜你喜欢
    • 2020-02-27
    • 1970-01-01
    • 2011-12-29
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多