0

我想在我的 chrome 扩展中包含 facebook 登录功能。我已经包括

popup.html 中的 connect.facebook.net/en_US/all.js 文件。但不工作。

我正在使用代码

window.fbAsyncInit = function() {
        // init the FB JS SDK
        FB.init({
            appId: 'APP_ID', // App ID from the App Dashboard
            //channelUrl : '//www.example.com/', // Channel File for x-domain communication
            status: true, // check the login status upon init?
            cookie: true, // set sessions cookies to allow your server to access the session?
            xfbml: true  // parse XFBML tags on this page?
        });

        // Additional initialization code such as adding Event Listeners goes here
        console.log(FB);

    };

    // Load the SDK's source Asynchronously
    (function(d, debug) {
        var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
        if (d.getElementById(id)) {
            return;
        }
        js = d.createElement('script');
        js.id = id;
        js.async = true;
        js.src = "http://connect.facebook.net/en_US/all" + (debug ? "/debug" : "") + ".js";
        ref.parentNode.insertBefore(js, ref);
    }(document, /*debug*/false));

但出现错误

拒绝加载脚本“ http://connect.facebook.net/en_US/all.js ”,因为它违反了以下内容安全策略指令:“script-src 'self' chrome-extension-resource:”。

4

2 回答 2

1

我使用以下代码并且它可以工作,而不会损坏 CSP

    function loginfacebook()
    {       
        chrome.windows.create(
        {
            'url': "https://www.facebook.com/dialog/oauth?client_id=yourclientid&redirect_uri=https://www.facebook.com/connect/login_success.html&scope=email&response_type=token"
        }, null);

        chrome.tabs.query({active:true}, function(tabs){
            tabid = tabs[0].id;
            chrome.tabs.onUpdated.addListener(function(tabid, tab)
            {
                var cadena = tab.url;
                if (cadena != null)
                {
                    var resultado = cadena.match(/[\\?&#]access_token=([^&#])*/i);
                }
                if (resultado != null)
                {                                           

                    token = resultado[0];
                    token = token.substring(14);
                    storagetoken(token);
                };
            });
于 2013-04-18T11:13:59.973 回答
1

如错误消息所述,Facebook 脚本不符合 CSP 标准。我没有看过那个脚本,但是如果你不能修改它并修复 CSP 问题,你通常有几个选项来处理这样的脚本:

  1. 将其放入沙盒 iframe中。
  2. 将脚本放在<webview>中。

不幸的是,该 Facebook 脚本的重点可能是在 FB 身份验证后设置一个 cookie,并且该 cookie 将保留在 iframe 或 webview 中,因此这些方法都不会最终在您的主应用程序中获得所需的 cookie。您必须想办法将 FB 登录操作的产品(cookie)传输到您的应用程序,可能通过 postMessage。如果您完成了这项工作并取得了成功,请将您的结果发布到某个地方,例如在 GitHub 上的示例应用程序中。

于 2013-04-18T02:43:44.400 回答