Внешний вид моего сайта сильно зависит от того, вошел ли пользователь через Facebook, и, следовательно, для меня очень важно обнаруживать любые изменения в сеансе Facebook, как только они происходят, чтобы я мог адаптировать внешний видстраница для отображения статуса входа пользователя.Я ненавижу использовать интервалы и тайм-ауты для такого рода кода, поскольку все может стать очень запутанным, но это, кажется, единственный вариант (насколько мне известно).
Я пытался использовать FB.subscribe(auth.statusChange)
,но это, кажется, не срабатывает достаточно регулярно и обязательно правильно.Может быть, я неправильно его использую?
То, как я тестировал FB.subscribe(auth.statusChange)
, - это просто входить в систему каждый раз, когда он запускается, и намеренно входить и выходить из Facebook на другой вкладке.Похоже, что событие на самом деле срабатывает около 30 минут (и это не всегда срабатывает).Мало того, что это очень сложно проверить, так как мне приходится каждый раз ждать 30 минут, кажется, что он не обязательно срабатывает правильно.Я использую его неправильно?
Код, который я собираюсь использовать, выглядит примерно так, но меня это не устраивает, поскольку он использует тайм-ауты / интервалы:
window.fbAsyncInit=function(){
// Initialize the Facebook object
FB.init({
appId:"123",
status:true,
cookie:true,
xfbml:true,
oauth:true
});
// Check the Facebook session status every 30 seconds
setInterval(function(){
FB.getLoginStatus(function(a){
// Change the page look based on the facebook status
fb_welcome(a.status)
},true)}
,30000);
};
В качестве альтернативы, я бы предпочел использовать тайм-аут вместо интервала, но для этого нужно, чтобы я передавал объект Facebook в другую функцию, подобную этой:
// Check the Facebook session status every 30 seconds
setTimeout(function(){
// Pass the Facebook object to the welcome function
fb_welcome(FB);
,30000);
Плохо ли передавать объект FB другой функции за пределамифункции fbAsyncInit
?