2011-03-26 41 views
0

如何使用开放图API显示Facebook登录按钮并在成功登录后获取用户名和电子邮件?我试过这个,但没有成功。登录时使用Facebook Open Graph API时出错

我这头部分:

<script src="http://connect.facebook.net/en_US/all.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    FB.init({ 
     appId: '12345', cookie: true, 
     status: true, xfbml: true 
    });   

    FB.api('/me', function (user) { 
     if (user != null) { 
      alert(user.name); 
     } 
    }); 
</script> 

我只是</body>标记之前<div id="fb-root"></div>在最后。到现在为止还挺好。我的<fb:comments> and <fb:comments-count>可以在我网站上的任何页面上正常工作。但我不能让我的登录工作(它说我没有做FB-根定义)

我有这样的地方在我的页面的中间:

<fb:login-button perms="email,user_checkins">Login with Facebook</fb:login-button> 

提交在登录后窗口,我得到一个js错误,说fb-root div没有定义。但是我确实已经在页面的最后。

+0

如果可以的话,请使用php方案..好得多... – Shouvik 2011-03-26 09:50:42

+0

也许不相关,但不要在没有确定您之前登录的情况下使用/我。查看我的答案以获得更好的选择。 – Aleadam 2011-03-30 23:52:16

回答

0

Asynchronous Loading

<div id="fb-root"></div> 

<script type="text/javascript"> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId: '12345', 
     cookie: true, 
     status: true, 
     xfbml: true 
    }); 

    FB.api('/me', function(user) { 
     if (user != null) { 
     alert(user.name); 
     } 
    }); 

    }; 

    (function() { 
    var e = document.createElement('script'); 
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
    e.async = true; 
    document.getElementById('fb-root').appendChild(e); 
    }()); 
</script> 
+1

另外,您应该在脚本标记中放置'#fb-root' div _before_。这可确保在脚本执行之前对其进行定义。 – Matthew 2011-04-05 17:54:06

+0

@Matthew fb-root补充:) – haha 2011-04-06 01:19:16

0

裹在函数内部初始化,您拨打的尽头,即尝试:

<html> 
    <head> 
     <script src="http://connect.facebook.net/en_US/all.js" type="text/javascript"></script> 
     <script type="text/javascript"> 
      function fbInit() { 
       FB.init({ 
        appId: '12345', cookie: true, 
        status: true, xfbml: true 
       });   
      }  
      if(FB.getSession() != null) { 
       // user logged in, continue with the program. 
      }; 
     </script> 
    </head> 
    <body> 
     <div id="fb-root"></div> 
     <script type="text/javascript"> 
      fbInit(); 
     </script> 
    </body> 
</html> 

,或者甚至更好,一个$(document).ready()(使用jQuery)内