gpt4 book ai didi

javascript - 检测 Facebook session 的变化

转载 作者:行者123 更新时间:2023-11-30 10:43:28 24 4
gpt4 key购买 nike

我网站的外观在很大程度上取决于用户是否通过 Facebook 登录,因此,一旦 Facebook Session 发生任何变化,我就必须立即检测到这些变化,以便我调整网站的外观,这一点非常重要反射(reflect)用户登录状态的页面。我讨厌对这类代码使用间隔和超时,因为事情会变得非常困惑,但它似乎是唯一的选择(据我所知)。

我尝试过使用 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 函数之外的另一个函数是个坏主意吗?

最佳答案

其实订阅auth.authResponseChange事件会更好。这列在 Event.subscribe 上文档作为最佳实践。

For most cases, you will want to subscribe to auth.authResponseChange rather than auth.statusChange. The response is returned as a javascript array, not encoded as JSON.

更新:
似乎这对您也不起作用,因为如果您调用 Facebook 的 API 并且可能在其他情况下(例如登录/注销),它会不时被调用。

Facebook JS-SDK 中并不存在您所要求的,间隔似乎是一种选择。您可以设置一个仅调用 FB.getLoginStatus 的时间间隔,并保持事件订阅不变,因为如果检测到状态/authResponse 更改,将触发事件。

FB.Event.subscribe('auth.authResponseChange', function(authResponse){
// authResponse changed
});

window.setInterval(FB.getLoginStatus, 30000);

关于javascript - 检测 Facebook session 的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com