登录时使用Facebook Open Graph API时出错

时间:2011-03-26 04:03:58

标签: javascript jquery .net facebook facebook-graph-api

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

我在头部有这个:

<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>

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

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

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

在登录窗口提交后,我收到一个js错误,指出未定义fb-root div。但我确实在页面的末尾有它。

2 个答案:

答案 0 :(得分: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 :(得分: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)