Google chrome extension 可以在扩展中构建facebook登录功能吗
我想在我的chrome扩展中包括facebook登录功能。我包括 popup.html中的connect.facebook.net/en_US/all.js文件。但不起作用 我正在使用代码Google chrome extension 可以在扩展中构建facebook登录功能吗,google-chrome-extension,Google Chrome Extension,我想在我的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
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));
但是得到了错误
拒绝加载脚本“”,因为它违反了以下内容安全策略指令:“script src‘self’chrome extension resource:”。正如错误消息所述,Facebook脚本不是。我没有看过该脚本,但是如果您无法修改它并修复CSP问题,您通常有两个选项来处理此类脚本:
不幸的是,Facebook脚本的要点可能是在FB身份验证后设置cookie,并且cookie将保留在iframe或webview中,因此这两种方法都不会在主应用程序中使用所需的cookie。你必须想办法将FB登录操作的产品(cookie)传输到你的应用程序,可能是通过postMessage。如果您完成了此项工作并成功,请将结果发布到某个地方,例如GitHub上的示例应用程序中。我使用以下代码,它可以正常工作,而不会损坏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);
};
});
“但不工作”是什么意思?Chrome开发者工具告诉你什么?好的,现在我已经编辑了我的问题,并提供了完整的细节。请参考一下,我已经用过了,工作正常。从这段代码中,我获得了访问令牌,并使用它对其进行了解析,在后端获得电子邮件并成功登录。但我希望我的弹出窗口保持打开状态,因为当我完成登录时,我可以通过ajax更改弹出窗口html。