Facebook JS SDK getLoginStatus行为不一致

时间:2018-08-12 15:35:08

标签: javascript facebook facebook-javascript-sdk facebook-login

我正在将Facebook登录名添加到我的应用程序中,但是我遇到了一种使用SDK方法之一的issus-FB.getLoginStatus 我创建了自己的SDK包装,并公开了一些主要方法。

/*eslint-disable no-undef*/

class FacebookSDK{
    constructor(options = {}){
        this.options = options;
    }

    isSdkLoaded(){
        return typeof FB !== 'undefined';
    }

    init(){
        window.fbAsyncInit = () => {
            FB.init(this.options);
        }

        (function(d, s, id) {
            var js, fjs = d.getElementsByTagName(s)[0];
            if (d.getElementById(id)) return;
            js = d.createElement(s); js.id = id;
            js.src = "https://connect.facebook.net/en_US/sdk.js";
            fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));

        return new Promise(resolve => {
            const checkIfSdkIsLoaded = () => {
                this.isSdkLoaded() ? resolve() : setTimeout(checkIfSdkIsLoaded, 100);
            }

            checkIfSdkIsLoaded();
        });
    }

    login(){
        return new Promise((resolve, reject) => {
            FB.login(function(response) {
                if (response.authResponse) {
                    FB.api('/me', function(user) {
                        resolve(user);
                    });
                } else {
                    reject(response);
                }
            });
        });
    }

    getLoginStatus(){
        return new Promise((resolve, reject) => {
            FB.getLoginStatus(function(response) {
                console.log(response);
                if (response.authResponse) {
                    FB.api('/me', function(user) {
                        resolve(user);
                    });
                } else {
                    reject(response);
                }
            });
        });
    }
}

export default FacebookSDK;

但是,当调用getLoginStatus时,我的代码“挂起”,因为回调并不总是被调用。 有时叫它,有时不是。.

我正在http://localhost/下的本地计算机上进行开发

我将localhost添加到了我的“应用程序域”部分,并且还将http://localhost/添加到了站点URL。

1 个答案:

答案 0 :(得分:1)

不确定我的建议中哪个是问题,但我正在将其变成答案:

  • 也许鬼魂或其他浏览器插件阻止了Facebook SDK
  • FB.getLoginStatus仅应在fbAsyncInit之后的FB.init中使用