Использование Facebook «FB.Canvas.getPageInfo» внутри функций jQuery - PullRequest
0 голосов
/ 07 января 2012

Я не могу заставить функции JavaScript Javascript Facebook работать внутри определенных команд jQuery ...

Это работает:

$("a#GetScrollTest").click( function() {
    FB.Canvas.getPageInfo(function(fbCanvasInfoObject) {
        var fbPosition = fbCanvasInfoObject.scrollTop;
        $("a#GetScrollTest").html("The scroll top value 
         is " + fbPosition + "px");
    });
    return false;
});

Это не (возвращает 'Uncaught ReferenceError: FBне определено '):

$("a.scrollLink").each(function() {
    $(this).click(function(){
        FB.Canvas.getPageInfo(function(fbCanvasInfoObject) {
        var fbPosition = fbCanvasInfoObject.scrollTop;
        $(this).html("The scroll top value is " + fbPosition + "px");
        });
        return false;
    });
});

Кто-нибудь знает, почему один метод щелчка работает, а метод .each () - нет?Почему он возвращает FB не определено?Звонки в том же месте.

1 Ответ

1 голос
/ 07 января 2012

Смысл этого большого блока сценариев, начинающегося с window.fbAsyncInit, заключается в том, что SDK Facebook загружается асинхронно .

Даже если у вас есть вызовы против FB внутриобратный вызов готовности документа jQuery, которого недостаточно для обеспечения загрузки SDK при выполнении этого кода.

К счастью, window.fbAsyncInit существует для точно для этой цели: он не будетзапускаться до загрузки SDK.

Из Документы Facebook :

Функция, назначенная на window.fbAsyncInit, запускается сразу после загрузки SDK.Любой код, который вы хотите запустить после загрузки SDK, должен быть помещен в эту функцию и после вызова FB.init.Например, здесь вы можете проверить статус пользователя, вошедшего в систему, или подписаться на любые события Facebook, в которых заинтересовано ваше приложение.

Просто переместите $("a.scrollLink").each(function() в функцию fbAsynchInit и вседолжен быть счастлив.

...