Facebook Javascript SDK Проблема: «FB не определен» - PullRequest
39 голосов
/ 29 декабря 2010

Следующий код, скопированный из документации Facebook здесь , у меня не работает в Chrome.

<div id="fb-root"></div>
<script src="http://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
});
</script>

В консоли Javascript я получаю:

Uncaught ReferenceError: FB is not defined

У меня нет проблем с SDK в Firefox или Safari, только Chrome.

Ответы [ 19 ]

1 голос
/ 29 декабря 2010

Попробуйте загрузить свои скрипты в разделе Head.Более того, будет лучше, если вы определите свои скрипты под каким-либо вызовом, например: document.ready, если вы определили эти скрипты в разделе body

1 голос
/ 04 ноября 2013

У меня была такая же проблема, и я нашел причину.

У меня есть avast! На моем компьютере установлен антивирус, и он попросил меня установить обновление для плагина chrome. Новый avast! plugin for chrome имеет функцию блокировки рекламы и отслеживания, и по умолчанию блокирует доступ к Facebook. Я решил свою проблему, просто добавив Facebook в avast! Хром плагин для нужного мне сайта.

Поскольку этот вопрос очень старый, я думаю, что некоторые люди могут иметь такую ​​же причину, как и я, новый avast! плагин Chrome.

1 голос
/ 25 июня 2016

Есть решение для вас:)

Вы должны запустить свой скрипт после загрузки окна

Если вы используете jQuery, вы можете использовать простой способ:

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId      : 'your-app-id',
            xfbml      : true,
            status     : true,
            version    : 'v2.5'
        });
    };

    (function(d, s, id){
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {return;}
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>

<script>
$(window).load(function() {
    var comment_callback = function(response) {
        console.log("comment_callback");
        console.log(response);
    }
    FB.Event.subscribe('comment.create', comment_callback);
    FB.Event.subscribe('comment.remove', comment_callback);
});
</script>
1 голос
/ 28 декабря 2012

Чтобы проверить предложения Мэттиса о том, что FB не заканчивается, я добавил предупреждение в скрипт.Это вызывает задержку, которую я мог контролировать.Конечно же ... это была временная проблема.

    $("document").ready(function () {
        // Wait...
        alert('Click ok to init');
        try {
            FB.init({
                appId: '###', // App ID
                status: true, // check login status
                cookie: true, // enable cookies to allow the server to access the session
                xfbml: true  // parse XFBML
            });
        }
        catch (err) {
            txt = "There was an error on this page.\n\n";
            txt += "Error description: " + err.message + "\n\n";
            txt += "Click OK to continue.\n\n";
            alert(txt);
        }
        FB.Event.subscribe('auth.statusChange', OnLogin);
    });
0 голосов
/ 14 марта 2017

У меня была похожая проблема, и это оказался Adblocker Pro. Обязательно убедитесь, что это или другие блокирующие расширения отключены. Я потерял около 1 часа 30 минут из-за этого. Почувствуй себя таким нубом;)

0 голосов
/ 20 мая 2011

Вы установили свойство appId для своего текущего идентификатора приложения?

0 голосов
/ 21 июня 2011

У меня была такая же проблема.Решением было использование core.js вместо debug.core.js

0 голосов
/ 22 июня 2012

Facebook предпочитает, чтобы вы загружали их SDK асинхронно, чтобы он не блокировал другие скрипты, необходимые для вашей страницы, но из-за iframe есть вероятность, что консоль попытается вызвать метод объекта FB передобъект FB полностью создан, даже если FB вызывается только в функции * 1002.
Попробуйте загрузить синхронный JavaScript, и вы больше не должны получать ошибку.Для этого вы можете скопировать и вставить код, предоставленный Facebook, и поместить его во внешний файл .js, а затем включить этот файл .js в тег <script> на <head> вашей страницы.Если вы должны загрузить их SDK асинхронно, то проверьте, что сначала создается FB, прежде чем вызывать функцию init.

0 голосов
/ 07 ноября 2011

Если вы используете JQuery, попробуйте поставить FB без вызова Jquery

например

$(document).ready(function(){
    FB.Event.subscribe('auth.login', function(){
        alert('logged in!');
    });
});

, который работал для меня

...