ФБ.init уже был вызван



Я создаю приложение facebook iframe. Мое приложение загружается один раз (я получаю signed_request один раз), а затем я перемещаюсь по страницам в iframe, используя внутренние доменные ссылки. Я заметил, что вижу эти странные сообщения как в Chrome, так и в Firefox



FB.init has already been called - this could indicate a problem


Я уверен, что этот метод вызывается только один раз, и кажется, Facebook хочет, чтобы я назвал его один раз за загрузку приложения (не один раз на странице).



window.fbAsyncInit = function() {
FB.init({
appId: param('facebook_app_id'),
frictionlessRequests: true,
oauth: true,
channelUrl: site_url('/channel.html')
})
}


какую ошибку (если таковая имеется) я делаю здесь?

657   3  

3 ответов:

С момента передачи параметров к js.src как #xfbml=1&appId=X, FB SDK будет автоматически инициализировать себя и таким образом FB.init постараюсь переинициализации.. Поэтому в вашем коде вам не нужно удалять FB.init функция, просто убедитесь, что вы не передаете параметры в коде, который загружает асинхронно JS SDK.

заменить:

js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&appId=X";

С :

js.src = "//connect.facebook.net/en_US/sdk.js";

надеюсь, что это помогает.

Если вам действительно нужно вызвать init более одного раза, вы можете сделать это:

FB._initialized = false;
FB.init();

но это не имеет никакого смысла для меня, у меня немного другая проблема, но это также относится к FB.init has already been called - this could indicate a problem сообщение.

у меня есть сайт на основе AJAX, где после каждой загрузки страницы мне нужно визуализировать XFBML из HTML, который я получаю от запроса AJAX (комментарии, например, кнопка и другие):

 <div class="fb-comments" data-href="{REMOVED}" data-num-posts="5" data-width="760" colorscheme="dark"></div>

чтобы сделать это, вы можете запустить это, когда вам нужно отобразить XFBML:

FB.XFBML.parse();

у меня тоже была эта проблема. Я просто удалил FB.init({...}) часть и он начал работать со следующим кодом:

window.fbAsyncInit = function () {
    FB.Event.subscribe('auth.logout', function () {
        // subscribe parts
    });

    // here is where fb.init() code was
};
(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/all.js#xfbml=1&appId=X";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

Я думаю, что теперь он автоматически вводит код, поэтому нет необходимости делать это вручную. Теперь мой код снова работает. Надеюсь, это поможет.

Comments

    Ничего не найдено.