У меня была эта проблема, и я решил ее аналогично решению, предоставленному Амри, поэтому я публикую ее здесь на случай, если кому-то еще понадобится ее использовать.
Я исходил из предположения, что вызов инициализации FB, выполненный в методе fbAsyncInit, будет инициализирован немедленно, поэтому я тоже закодировал использование объекта FB в методе $(document).ready()
. Это не относится к делу. fbAsyncInit занимает довольно много времени после загрузки страницы, чтобы завершить инициализацию. Вот мое решение, при использовании jQuery на моем сайте:
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId : 'your_app_id', // App ID
channelUrl : 'your channel',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
jQuery(document).trigger('FBSDKLoaded'); //This is the most important line to solving the issue
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=269187653191150";
ref.parentNode.insertBefore(js, ref);
}(document));
</script>
Последняя задача - просто переключить ваш код $(document).ready()
на привязку для вашего мероприятия. Это происходит везде, где вы используете объект FB.
(function($) {
$(document).bind('FBSDKLoaded', function() {
//Code using the FB object goes here.
});
})(jQuery);
Я должен также упомянуть одну вещь: Firefox гораздо более терпим к этому, чем браузеры Webkit, такие как Chrome. Я не мог понять, почему ни один из моих jQuery не работал должным образом в Chrome ... ну, вот почему.
Надеюсь, это кому-нибудь поможет.