Ошибка при использовании Facebook Open Graph API при входе - PullRequest
0 голосов
/ 26 марта 2011

Как вы используете 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 голосов
/ 31 марта 2011

Оберните инициализацию внутри функции, которую вы вызываете в самом конце, то есть:

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

0 голосов
/ 26 марта 2011

Попробуйте с Асинхронная загрузка

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...