当前位置: 代码迷 >> JavaScript >> Facebook javascript api 调用停止发送
  详细解决方案

Facebook javascript api 调用停止发送

热度:57   发布时间:2023-06-07 16:36:43.0

我们有一个使用 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”数组仍然包含以前的登录请求,现在第二个请求刚刚添加到那里。 所有的电话都被卡在那里:

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 时,会同步加载并返回初始版本。

负载异步。 所以,我们解决这个问题的方法是在页面本身加载时初始化 FB。 然后使用 FB 或 window.FB 在单击时进行其他调用(异步)。 这就是为什么它也可以在控制台上运行的原因,因为到那时已加载较新的 sdk 并且可以使用。

伪示例代码:

constructor() {
    FB.init({...})
}

onButtonClicked() {
    FB.login({...})
}

另外,请注意 __buffer 现在被 __globalCallbacks 在加载的较新 sdk 中替换。

希望这会有所帮助

  相关解决方案