1

这是我的情况:我有一个 Javascript 插件,当点击它时,它会在托管它的第三方网站上启动一个弹出窗口。然后弹出窗口显示一个 IFRAME,我在其中使用 Facebook 作为登录方法。

当弹出窗口启动时,它最近开始给出错误:

不安全的 JavaScript 尝试从 URL https://s-static.ak.facebook.com/connect/xd_arbiter.php?version=18的框架访问具有 URL http://{THIRD-PARTY-SITE-GOES-HERE} 的框架 #channel= …%3Dtabmodule%26utm_term%3D200000%26fb_xd_fragment%23xd_sig%3Df2ade8e518%26。

请求访问的帧具有“https”协议,被访问的帧具有“http”协议。协议必须匹配。

IFRAME 本身在 https 上,并且过去可以正常工作。我不确定 Chrome 为何尝试访问父页面。我无法控制父页面,因此无法将它们设为 https。

这是我在 IFRAME 中的 FB 初始化代码:

    window.fbAsyncInit = function() 
    {
        FB.init({
            appId: '{myappid}', 
            status: true, 
            cookie: true, 
            xfbml: true, 
            oauth: true,
            channelURL : 'https://degree3.com/channel.php'
        });

        FB.getLoginStatus( function(response) 
        {   
            if (resp = response.authResponse) 
            {
                $( '#fb_button' ).attr( "onclick", "signinViaFacebook( response.authResponse.userID, response.authResponse.accessToken );" ).show();
            } 
        });
    };
    (function() 
    {
        var e = document.createElement('script'); e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
    }());

有什么想法可以解决这个错误吗?

4

1 回答 1

0

你不能在 iframe 中使用 facebook 登录,它永远不会工作。甚至不要费心尝试我已经花了几个令人沮丧的时间来尝试做同样的事情。即使您解决了您现在遇到的 https 问题,您也将面临 X-Frame Options 错误,因为 facebook 在响应标头中设置了一个选项,该选项仅接受来自同一来源(即 facebook)的请求。

我基本上想说的是,出于安全原因,无法在 iframe 中启动 facebook。在当前困境中,最好的选择是打开另一个带有 facebook 登录的弹出窗口。iframe 根本行不通。我知道它看起来并不优雅,但这是唯一的方法,或者您将弹出窗口本身重定向到 facebook 并有一个回调机制来重定向回您的插件。

希望能帮助到你。

于 2013-02-13T06:05:06.260 回答