FB.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')
})
}
Какую ошибку (если таковая имеется) я делаю здесь?
Ответы
Ответ 1
С момента передачи параметров в 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";
Надеюсь, что это поможет.
Ответ 2
Если вам действительно нужно вызвать 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();
Ответ 3
У меня также была эта проблема. Я просто удалил часть 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'));
Я думаю, теперь он автоматически вводит код, поэтому нет необходимости делать это вручную. Теперь мой код работает снова. Надеюсь, это поможет.