2012-03-17 42 views
0

我想定期檢查登錄用戶的狀態。我的方法如下,但我不確定這是否是最好的方法。反覆檢查用戶的登錄狀態?

window.fbAsyncInit=function(){ 
    FB.init({ 
     appId:'123', 
     status:true, 
     cookie:true, 
     xfbml:true, 
     channelUrl:'file', 
     oauth:true 
    }); 
    setInterval(function(){ 
     FB.getLoginStatus(function(a){ 
      // do something 
     },300000); 
    }); 
} 

我知道的「訂閱」功能,但我真的不知道他們是什麼。如果這些都適合,那麼我會考慮使用它們,但我需要更清楚地瞭解它們的作用和頻率。我已閱讀文檔,他們只是說它附加一個處理程序。這不是很詳細!它將一個處理程序附加到!!?

此外,如果我想調用'fbAsyncInit'函數之外的FB.getLoginStatus,這可能嗎?

任何幫助非常感謝。

回答

0

在這個問題上花費了很長一段時間後,我決定去與我的setTimeout解決方案。這是由於以下幾個原因:

  1. event.subscribe根本不能很好地工作,事實上,它可能會變得無用!我設法讓它起火,但事件僅在大約半小時後才從Facebook註銷。另外,如果沒有找到會話,它會自行分離,因此它不會檢測您是否登錄到Facebook。
  2. 用我的方法,我知道事件何時會觸發,我對它有更多的控制權。

因此,現在,如果您在另一個選項卡中打開Facebook並登錄或註銷,我的網站將檢測到此並相應地更改頁面上的內容。

0

我建議你仔細看看FB.subscribe函數,它的目的正是你要找的。對任何事件進行輪詢通常都是不好的設計,並且可能會在更復雜的實現中變得非常混亂。

FB.Event.subscribe('auth.login', function(response) { 
    // do something with response 
}); 

上面的'訂閱'你'auth.login'事件。意思是,每當'auth.login'狀態改變時,上面的回調就會運行。您可以將事件替換爲其他幾種支持的事件,並在到達時運行回撥。如果你想動態地停止監聽任何事件,你可以隨時在你的代碼中調用event.unsubscribe,並且瞧,你不再監聽事件的變化。

來源:http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

+1

這就是我的想法,但我已經測試了這一點,它不以這種方式工作。我在事件中設置了一個提醒,當我在另一個標籤中登錄和退出Facebook時,什麼都沒有發生。當我加載頁面時,警報就消失了。 – 2012-03-17 18:36:27