我们有一个使用Facebook登录的网站。 4天前,未执行任何更改,登录按钮停止运行。
对FB.init的调用运行良好:
function initFB() {
FB.init({
appId: ufm_config.fbAppId,
cookie: true,
oauth: true,
xfbml: true,
logging: true,
autoLogAppEvents: true,
frictionlessRequests: true,
status: true,
version: 'v2.12'
});
FB.getLoginStatus(fbConnectionChanged);
FB.Event.subscribe("auth.login", fbConnectionChanged);
FB.Event.subscribe('auth.authResponseChange', fbConnectionChanged);
FB.Event.subscribe("auth.logout", fbConnectionChanged);
}
对getLoginStatus(fbConnectionChanged)的调用也有效,并且正在触发回调。
加载页面后,用户可以单击Facebook登录按钮,当他们调用FB.Login(fbConnectionChanged)时。我可以看到调用被添加到Facebook sdk代码中的“calls”数组中,但回调没有被触发。
当我再次单击按钮时,我看到“calls”数组仍然包含先前的登录请求,现在第二个请求就是在那里添加。所有电话都被卡在那里:
f .__ buffer.calls.push([a,Array.prototype.slice.call(arguments)])
即使我将FB.Login(fbConnectionChanged)调用更改为FB.getLoginStatus(fbConnectionChanged),我也会得到相同的行为,因此它不仅仅是登录调用本身。
我们也没有更改Facebook应用程序中的任何内容,并且该站点在“有效的OAuth重定向URI”中配置。
我还可以尝试做些什么来解决它?
当我从控制台调用FB.login()时它工作正常。无法理解为什么它对按钮点击功能不起作用。
我们在3-4天前遇到了同样的问题。调用将转到__buffer。这里的问题是FB在他们的sdk上改变了一些东西,内部加载了更新版本的SDK。执行init时,将加载初始版本并同步返回。
https://connect.facebook.net/en_US/sdk.js异步加载https://connect.facebook.net/en_US/sdk.js?hash=39f310e26cdcb1dd91634dc45d62ffe9&ua=modern_es6。因此,我们解决这个问题的方法是在页面本身的负载上初始化FB。然后使用FB或window.FB进行其他调用(异步)。这就是为什么它在控制台上工作,因为当时加载了较新的sdk并且可以使用它。
伪示例代码:
constructor() {
FB.init({...})
}
onButtonClicked() {
FB.login({...})
}
另外,注意到__buffer现在被更新的sdk加载中的__globalCallbacks取代。
希望这会有所帮助