我的站点的外观在很大程度上取决于用户是否通过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