1

我从按钮单击事件调用 Facebook JS SDK 的 FB.getLoginStatus。我的问题是,如果 status 参数设置为 true,则会触发浏览器弹出窗口阻止程序,从而阻止显示登录对话框。但是,当我的状态为 false 时,不会触发弹出窗口阻止程序。我需要将状态设为 true,因为我的网站需要知道用户是否已登录 Facebook,而无需刷新页面。False 参数值意味着 FB 只获取缓存的登录状态,如果用户在您的网站上退出 Facebook,这可能是错误的。

我怎样才能解决这个问题?

这是一些说明问题的代码

 $('.my-button').click(function () {

            FB.getLoginStatus(function (response) {

                if (response.status != 'connected') {

                    FB.login(function (r) {
                        if (r.status == 'connected') {
                            alert('logged in');
                        }
                    });
                }

            }, true);

        });
4

1 回答 1

1

这可能是因为当您将 forceCheck 传递给 getLoginStatus 时,回调被异步调用,从而切断了与“click”事件的连接。浏览器或弹出窗口阻止程序未能在调用堆栈上找到用户发起的单击事件,因此它会阻止弹出窗口。我目前正被同样的问题所困扰。

选项:

1)直接调用FB.login。

缺点:即使对于已登录的用户,也难看弹出式闪光灯。

2) 在使用 getLoginStatus 检测到用户未登录(或应用程序未授权)时,在 $('.my-button') 附近的某处插入一个单独的登录按钮,可能带有一条消息说用户必须单击登录按钮与 Facebook 连接。在第二个按钮的点击处理程序中直接调用 FB.login() 。

缺点:-50 转化率

我现在将尝试 2) 并报告结果。

于 2013-02-17T18:16:39.033 回答