2017-03-21 68 views
0

我尝试写一个Chrome浏览器扩展,这是通过访问某个网站来触发的。到目前为止,这已经工作。我的分机用户来自我的网页游戏,他们用他们的Facebook帐户登录。为了用他们的游戏帐户识别分机用户,我需要从我的游戏中知道他们的fb应用范围用户ID。铬扩展和Facebook登录问题

到目前为止,我了解到我的后台脚本无法使用facebook sdk登录,因为window.fbAsyncInit没有在里面调用。我环顾四周寻找解决方案,并找到了此页:http://brianmayer.com/2012/12/building-a-chrome-extension-that-connects-to-a-facebook-app/

他打开一个包含iframe的不可见选项卡。在iframe的内部,他从Web服务器调用Facebook登录sdk,然后将带有windows.postmessage的用户数据发送给父级。这听起来像是我的问题的完美解决方案。只有一条线,我不明白我补充有:

parent.postMessage({connectStatus:"" + response.status + "", userID:"" + uid + "", accessToken:"" + at + ""}, "https://www.<PARENT_PAGE_DOMAIN>"); //This MUST match the root domain where the iFrame will be inserted, or the message won't get passed 

我有什么在现场PARENT_PAGE_DOMAIN补充的吗?我使用了清单文件中content_scripts/maches中的页面的根域,并使用了托管iframe页的域,但我从未在我的后台脚本中收到邮件。

+0

的评论说,它需要你插入的iframe到页面的域名... – CBroe

+0

是的,我已经读过,但就像我写我不知道当我创建一个动态的HTML包括一个背景脚本内的iframe的域URL是如何?我的意思是只有iframe中的文件有一个真正的http地址。这是该扩展的后台脚本。那么我在哪里可以看到该背景文件具有哪个网址? – computermaus

回答

0

您是否尝试过使用它? enter link description here

所有你需要得到重定向URL首先 get redirect url 这里是我的代码:

chrome.identity.launchWebAuthFlow({ 
    url: AUTH_URL, 
    interactive: true 
    }, function(redirectURL) { 
    if (chrome.runtime.lastError) { 
     alert(chrome.runtime.lastError.message); 
    } 
    if(redirectURL){ 
     var q = redirectURL.substr(redirectURL.indexOf('#')+1); 
     var parts = q.split('&'); 
     for (var i = 0; i < parts.length; i++) { 
     var kv = parts[i].split('='); 
     if (kv[0] == 'access_token') { 
      var token = kv[1]; 
      console.log(token) 
      // do something... 
     } 
     } 
    } 
    });