我的站點的外觀在很大程度上取決於用戶是否通過Facebook登錄,因此,對於我來說,發現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
功能之外的其他功能?
謝謝您的回覆! :-)這多久會被解僱?即使用戶狀態更改爲'not_authorized'或'unknown',它是否被解僱? – 2012-03-18 13:05:34
也許我使用這個錯誤,但它似乎沒有工作。我已將它放入我的代碼中,然後在另一個選項卡上退出Facebook。絕對沒有事件發生在我的網站上,並且控制檯中沒有記錄任何事件。 – 2012-03-18 13:10:48
是否有任何意見保持活動訂閱,因爲我將每隔30秒測試一次更改?我想我會使用第二種方法,我建議使用setTimeout,我唯一的問題是,我不知道我是否應該將Facebook對象傳遞到另一個函數。這是一個壞主意嗎? – 2012-03-18 13:48:25