使用FB问题登录:带有“登录”对话框的FB弹出窗口被Web浏览器阻止

时间:2014-09-12 10:01:05

标签: jquery facebook facebook-graph-api facebook-javascript-sdk

FB文档说:

  

如此功能的参考文档中所述,它会产生一个   弹出窗口显示“登录”对话框,因此应该只显示   由于某人点击HTML按钮而调用(以便   浏览器不阻止弹出窗口。

我按照说法做了,我将FB.login函数放入onCLick函数中。但Login dialog仍被阻止。为什么?如何重新排序代码?

// Facebook
// Here is a click event, so FB.login is inside a click function.
$("#login_btn_fb").on("click", function() {


    function getUserData(res, fCallback) {
        if(res.authResponse != null) {
            FB.api('/me', function(response) {
                console.log('/me_: ', response);
            });
        }
        else {
            console.log("getUserData CANCEL: ", res);
            return;
        }
    };


    FB.getLoginStatus(function(res) {

        var uid = null;
        var accessToken = null;

        if($.isPlainObject(res)) {

            // Fb+ App+
            if(res.status == "connected") {
                console.error("connected");
                uid = res.authResponse.userID;
                accessToken = res.authResponse.accessToken;
                getUserData(res, null);
            }
            // Fb+ App-
            else if(res.status == "not_authorized") {
                console.error("not_authorized");
                FB.login(function(res) {
                    getUserData(res, null);
                }, {scope: 'email,user_birthday,user_photos,public_profile,user_location'});
            }
            // Fb- App-
            else {
                console.log("UNKNOWN");
                FB.login(function(res) {
                    // console.log("===UNK FB.login res: ", res);
                    getUserData(res, null);
                }, {scope: 'email,user_birthday,user_photos,public_profile,user_location', return_scopes: true});
            };
        }
        // ERROR with FB
        else {
            alert("Facebook sign in failure. Please try again later.");
            return;
        }
    });
});

1 个答案:

答案 0 :(得分:1)

您没有将FB.login放在由User事件直接调用的函数中,而是放在FB.getLoginStatus的异步回调函数中。

使用FB.getLoginStatus刷新用户会话并检查用户是否在加载页面时正确登录(在FB.init之后),FB.login仅在用户交互时登录 - 但不在异步回调中当然。

相关问题