2012-03-17 68 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