Няколко fbAsyncInit?

В моя сайт използвам асинхронно зареждане на Facebook JS SDK. За да го настроя, използвам стандартния FB.init във функцията window.fbAsyncInit.

Проблемът обаче е, че в моя сайт тази функция е на всяка една страница. Въпреки това, когато съм в подстраница, не мога директно да добавя към JS функцията поради дизайна на моя сайт, трябва да копирам и поставя цялата функция и да добавя моите части.

Не мисля, че са възможни множество fbAsyncInit, така че кой е най-добрият начин да се приложи това?


person TheLQ    schedule 09.02.2012    source източник


Отговори (3)


Можете да използвате това вместо това, за да проверите дали вече имате fbAsyncInit и да го свържете заедно в такъв случай:

var oldCB = window.fbAsyncInit;
window.fbAsyncInit = function(){
    if(typeof oldCB === 'function'){
        oldCB();
    }
    //Do Something else here
 };
person Eduardo    schedule 01.03.2012
comment
Опа, забравих за този въпрос. След повече търсене намерих този начин за разширяване на функцията. Надяваме се, че това ще помогне на някой друг. Благодаря! - person TheLQ; 01.03.2012
comment
Знаете ли дали това е официалният начин да направите това? Или ако Facebook предложи друг метод/има решение за това? Изглежда като доста обичайно нещо, освен ако не искате да поставите целия ваш JS код на едно място. - person powerbuoy; 29.03.2012
comment
@powerbuoy Не мога да кажа дали има официален начин, различен от този. Но това не е хак. Това е доста често срещан модел на проектиране за javascript. - person Eduardo; 30.03.2012
comment
@EduardoCereto - добре, благодаря. Да, знам, направих същото и преди, когато прикачвах събития, нещо е, че когато опитах това вчера, изглежда не работи и ми е странно, че FB не ни дава по-лесен начин да го направим (нещо като fbAsynInit.addFunc(function () {}) би било хубаво). - person powerbuoy; 30.03.2012

Понякога API на Facebook може да извика fbAsyncInit, преди вашият втори fbAsyncInit дори да е започнал. Това ще поправи този случай:

        if (window.fbAsyncInit.hasRun === true) {
            setup(); // do something
        } else {
            var oldCB = window.fbAsyncInit;
            window.fbAsyncInit = function () {
                if (typeof oldCB === 'function') {
                    oldCB();
                }
                setup(); // do something
            };
        }
person Kim T    schedule 20.08.2013

има "статично" свойство в fbAsyncInit

Опитайте по-долу

if (window.fbAsyncInit && window.fbAsyncInit.hasRun) {
    // do sth
}
person huang47    schedule 05.09.2012
comment
Не мисля, че това ще изчака, докато fbAsyncInit се изпълни. - person TheLQ; 05.09.2012