Вызов FB.getLoginStatus() перед вызовом FB.init()

У меня есть это сообщение в консоли

FB.getLoginStatus() called before calling FB.init(). 

Мой код

<div id="fb-root"></div>
<script>
        // Load the SDK Asynchronously
        (function(d){
           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 = \"//connect.facebook.net/fr_FR/all.js#xfbml=1\";
           ref.parentNode.insertBefore(js, ref);
         }(document));
</script>
<div class="fb-like" data-send="false" data-layout="button_count" data-width="100" data-show-faces="false"></div>

Я не понимаю, почему. У меня есть только один вызов этой facebook как плагин на всем моем сайте.

Ответ 1

Короткий ответ

Добавьте &status=0 к URL-адресу js.src, чтобы предупреждение исчезло, то есть:

//connect.facebook.net/fr_FR/all.js#xfbml=1&status=0

Полный ответ

FB.init() будет вызываться внутри facebook script при загрузке, если параметры выдаются после знака hash (#). Здесь xfbml передается, поэтому вызывается FB.init().

(исходный код: http://connect.facebook.net/fr_CA/all/debug.js строка 8699 на момент публикации)

Аргументы по умолчанию для init() используются, если явно не указаны: status arg default is true - который вызывает запуск FB script getLoginStatus() при запуске, что жалуется, потому что идентификатор приложения необходим для этот вызов функции.

Социальные плагины FB не нуждаются в идентификаторе приложения - они отображаются в iframe, исходящем из facebook.com, поэтому статус входа в FB и файлы cookie доступны для них.

Мастер "Получить код" в разделе Социальные плагины разработчиков FB генерирует URL-адрес с параметром xfbml, он должен быть обновлен с помощью status=0 param IMHO.

Ответ 2

Если вы видите предупреждение "Invalid App ID" после реализации решения

fooobar.com/questions/130115/...

затем добавьте appId в свой URL-адрес js.src, чтобы он работал для вас, то есть:

//connect.facebook.net/en_US/all.js#xfbml=1&status=0&appId=YOUR_APP_ID

Присутствие этого appId автоматически вызовет FB.init() с базовыми настройками приложения.

Ответ 3

Предупреждение: некоторые предположения ниже. Если это не так, я могу удалить его.

Я бы предположил, что проблема заключается в загрузке SDK асинхронно, но в строке "Входящие". Тогда возможно, что кнопка Like вызывает getLoginStatus до загрузки script. Вы можете проверить/проверить это, комментируя script, чтобы загрузить SDK асинхронно и вместо этого включить его как обычный тег script в заголовке страницы.

Конечно, это просто простой способ проверить. Если вы можете убедиться, что в качестве проблемы "правильный" способ решить эту проблему, вероятно, будет гарантировать, что кнопка "Like" не появится на странице до загрузки SDK.

Ответ 4

Я ответил на аналогичный вопрос SO здесь.
На самом деле, если вы вообще не видите кнопку Like, то этот вопрос является точным дубликатом другого.

В моем случае, я вижу консольную ошибку, но я также вижу кнопку Like.

Ответ 5

Вам нужно вызвать функцию FB.init перед функцией статуса входа в вызывающий fb

    <div id="fb-root"></div>
    <script src="//connect.facebook.net/en_US/all.js"></script> 
    <script>
      FB.init({
            appId  : 'YOUR APP ID',
            status : true, // check login status
            cookie : true, // enable cookies to allow the server to access the session
            xfbml  : true,  // parse XFBML
            oauth : true
        });

    // Load the SDK Asynchronously
    (function(d){
       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 = \"//connect.facebook.net/fr_FR/all.js#xfbml=1\";
       ref.parentNode.insertBefore(js, ref);
     }(document));
  </script>

Ответ 6

Я работал с этим кодом:

<!--[if IE]>
<script src="https://connect.facebook.net/pt_BR/all.js?xfbml=1" type="text/javascript"></script>
<![endif]-->
<script src="https://connect.facebook.net/pt_BR/all.js#xfbml=1" type="text/javascript"></script>

 <div class="fb-like"
          data-href="#" onclick="location.href='https://www.myurl.com'; return false;" 
          data-send="true" data-layout="button_count" 
          data-width="50" data-show-faces="false"></div>