Подтвердить что ты не робот

Как обходиться "FB не определен"?

Иногда я получаю сообщение "FB не определено" при загрузке http://connect.facebook.net/en_US/all.js

Я понял, что проблема в том, что иногда мой сайт просто не загружает этот файл. Так что ничего не получается, и объект FB буквально не существует.

Мое решение состоит в том, чтобы запретить моим пользователям, когда это произойдет, поэтому я пробовал следующие коды на JavaScript, но ни один из них не работает:

if (FB) {/*run the app*/} else {/*alert the user*/}
if (FB!==false) {/*run the app*/} else {/*alert the user*/}
if (FB!='undefined') {/*run the app*/} else {/*alert the user*/}

спасибо за ответ!

4b9b3361

Ответ 1

Предполагая, что FB является переменной, содержащей объект Facebook, я бы попробовал что-то вроде этого:

if (typeof(FB) != 'undefined'
     && FB != null ) {
    // run the app
} else {
    // alert the user
}

Чтобы проверить, что что-то есть undefined в обычном старом JavaScript, вы должны использовать оператор typeof. Образец, который вы показываете, где вы просто сравниваете его со строкой 'undefined', будет оцениваться как false, если ваш объект FB действительно не содержит строку 'undefined'!

В стороне, вы можете использовать различные инструменты, такие как Firebug (в Firefox), чтобы узнать, можете ли вы понять, почему файл Facebook не загружается.

Ответ 2

Я думаю, вам следует решить основную проблему, решение которой предоставляется Facebook (загрузка асинхронно SDK):

Вы должны вставить его непосредственно после тега открытия на каждой странице, которую вы хотите загрузить:

<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'your-app-id',
      xfbml      : true,
      version    : 'v2.1'
    });
  };

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

В документации :

В SDK для JavaScript для JavaScript нет автономных файлов, которые необходимо загрузить или установить, вместо этого вам просто нужно включить короткий фрагмент обычного JavaScript в вашем HTML, который будет асинхронно загружать SDK на ваши страницы. Асинхронная загрузка означает что он не блокирует загрузку других элементов вашей страницы.

UPDATE:, используя последний код из документации.

Ответ 3

Я думаю, вы пропустили, чтобы положить половину двоеточия ; в закрывающей фигурной скобке } window.fbAsyncInit = function() { ... };

Ответ 5

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

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

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

Ответ 6

Вы были очень близки вашему оригинальному примеру. Вы можете либо использовать предложение @jAndy, либо:

if (typeof FB != 'undefined')

Ответ 7

Очень странно, что FB не загружается в ваш javascript, если у вас есть тэг script. Убедитесь, что в вашем браузере не установлены блокираторы javascript, блокировщики рекламы, блокировщики отслеживания и т.д., Которые нейтрализуют ваш код FB Connect.

Ответ 8

У меня не было FB. Оказалось, что я прототипирую функции в класс Object, называемый "merge", а другой - "toArray". Оба из них прикрутили Facebook, никаких сообщений об ошибках, но он не загрузился.

Я изменил имена своих прототипов, теперь он работает. Эй, если Facebook собирается прототипировать Object, разве мне не разрешено прототипировать его?

Ответ 9

FB рекомендует добавить async all.js включить сразу после тела, чтобы объект FB был подготовлен, когда вы используете его на странице.

Вы также можете использовать искусственную задержку, используя setTimeout, чтобы убедиться, что объект FB загружен. например.

<script>setTimeout(function(){
FB.Event.subscribe('edge.create',
function (response) {
    alert('msg via fb');
});},2000);
</script>

Ответ 10

<script>  
    window.fbAsyncInit = function() {    
        FB.init({      
            appId      :'your-app-id',      
            xfbml      :true,      
            version    :'v2.1'
        });
    };
    (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> 

Из документации: в SDK для JavaScript для JavaScript нет каких-либо автономных файлов, которые необходимо загрузить или установить, вместо этого вам просто нужно включить короткий фрагмент обычного JavaScript в свой HTML-код

Ответ 11

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

Ответ 12

...
</head>
<body>
    <!-- Load Facebook SDK for JavaScript -->
    <div id="fb-root"></div>
<script type="text/javascript">
...

Проверить div id = "fb-root" /div "!!! Очень важно запустить.