Вопрос

Следующий код, скопированный из документации 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.

Это было полезно?

Решение

Я увидел случай, когда Chrome установил WidgetBlock, который блокировал сценарий Facebook. Результатом было именно это сообщение об ошибке. Убедитесь, что вы отключите любые расширения, которые могут мешать.

Другие советы

Таким образом, проблема в том, что вы не ждете завершения инициации. Это приведет к случайным результатам. Вот что я использую.

window.fbAsyncInit = function () {
    FB.init({ appId: 'your-app-id', cookie: true, xfbml: true, oauth: true });

    // *** here is my code ***
    if (typeof facebookInit == 'function') {
        facebookInit();
    }
};

(function(d){
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    d.getElementsByTagName('head')[0].appendChild(js);
}(document));

Это гарантирует, что после того, как все будет загружено, функция FacebookInit доступна и выполнена. Таким образом, вам не нужно дублировать код инициации каждый раз, когда вы хотите его использовать.

function facebookInit() {
   // do what you would like here
}

Эта ошибка также появится, если вы опустите полуколон после определения fbasyncinit.

window.fbAsyncInit = function() {
    FB.init({
        appId: 'YOUR APP ID',
        status: true,
        cookie: true,
        xfbml: true
    });
    //do stuff
}; //<-- semicolon required!

Без полуколона ситуация такая же, как в этом более коротком примере:

var x = function () {
    console.log('This is never called. Or is it?');
}

('bar');

Функция вызывается, потому что без полуколона часть («Бар») рассматривается как вызов для просто определенной функции.

Я тоже столкнулся с этой проблемой, и что решило, что она не имеет ничего общего с Facebook, но предыдущий сценарий, который я включил, был в плохой форме

<script type="text/javascript" src="js/my_script.js" />

Я изменил это на

<script type="text/javascript" src="js/my_script.js"></script>

И это работает ...

Weew ... Надеюсь, мой опыт поможет другим, застрявшим в этом, что было почти обо всем, но все еще не может заставить его работать ...

О, мальчик ... ^^

Попробуйте асинхронную загрузку: http://developers.facebook.com/docs/reference/javascript/fb.init/

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    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
    });
  };

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

У меня был очень грязный коди, который загружал JavaScript Facebook через Ajax, и мне пришлось убедиться, что файл JS был полностью загружен, прежде чем позвонить в fb.init, это, кажется, работает для меня

    $jQuery.load( document.location.protocol + '//connect.facebook.net/en_US/all.js',
      function (obj) {
        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
        });
        //ANy other FB.related javascript here
      });

Этот код использует jQuery для загрузки JavaScript и выполнения обратного вызова функции javaScript. Это намного менее бесполезно, чем создание onload EventListener для блока, который, в конце концов, не очень хорошо работал на IE6, 7 и 8

Adblock блокирует сценарии API Facebook JS, потому что это связано с Facebook Connect, что часто раздражает.

Не уверен, что у вас все еще есть эта проблема, но у меня просто была такая же проблема, оказалось, что у меня было расширение, которое блокировало Facebook с всех сайтов, которые не являются Facebook. Отключил это, работал!

Используйте установку, потому что иногда FB.Init занимает некоторое время, чтобы быть объявленным

function testAPI() {
     console.log('Welcome!  Fetching your information.... ');
     FB.api('/me', function(response) {
         console.log('Good to see you, ' + response.name + '.');
     });
}
function login() {
    FB.login(function(response) {
        if (response.authResponse) {
            testAPI();
        } else {
            // cancelled
        }
    });
}
setTimeout(function() {
    login();
},2000);

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

У меня была та же проблема, и единственное решение, которое я обнаружил, - это все, что использовало оператор FB в скрипте init, я также использовал асинхронную загрузку, поэтому функция обратного вызова выполняется после всего, что требует FB. У меня есть обычная страница, загруженная Dinamycally с PHP, поэтому многие части нуждаются в разных функциях Facebook, контролируемых PHP, если операторы, которые делают все немного грязным, но работают!. Если я попробую вывести какое -либо объявление FB из сценария загрузки, то Firefox показывает сообщение «FB не определено». Надеюсь, это поможет во всем.

Чтобы проверить предложения Mattys о том, что 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);
    });

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

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

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

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

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

Если вы используете 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>

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

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

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

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

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

например

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

это сработало для меня

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top