不安全的JavaScript尝试访问框架...协议必须匹配

时间:2013-02-13 00:19:07

标签: javascript facebook iframe https

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

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

  

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

     

请求访问的帧具有“https”协议,帧为   access具有'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);
    }());

我是如何解决错误的?

1 个答案:

答案 0 :(得分:0)

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

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

希望它有所帮助。