仅在用户单击按钮时运行Facebook登录

时间:2015-02-20 22:08:09

标签: javascript facebook facebook-graph-api

我正在使用Facebook SDK在Facebook上检索当前登录的用户并输出他们的姓名和电子邮件地址。

我遇到的问题是当用户访问我的页面时,他们的名字和电子邮件地址会自动显示。我希望只有在点击Facebook登录功能时才会发生这种情况。

我的JS是:

function statusChangeCallback(response)
{
    if (response.status === 'connected') {
      updateUIWithFacebookFields();
    }
}

function checkLoginState()
{
    FB.getLoginStatus(function(response) {
      statusChangeCallback(response);
    });
}

window.fbAsyncInit = function()
{
    FB.init({
        appId      : 'snipped',
        cookie     : false,
        xfbml      : true,
        version    : 'v2.1'
    });

    FB.getLoginStatus(function(response)
    {
        statusChangeCallback(response);
    });
};

(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 = "//connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

function updateUIWithFacebookFields()
{
    FB.api('/me', function(response)
    {

        var registerUsernameElm = document.getElementById('username');
        var registerUserEmailElm = document.getElementById('useremail');

        if(registerUsernameElm)
        {
            registerUsernameElm.value = response.name;
        }
        if(registerUserEmailElm)
        {
            registerUserEmailElm.value = response.email;
        }

    });
}

我的按钮代码是:

<fb:login-button scope="public_profile,email" size="large" onlogin="checkLoginState();"></fb:login-button></span>

如何在单击按钮时才运行此操作?

1 个答案:

答案 0 :(得分:0)

哇,我很惊讶没有人想回答这个问题。几分钟前我遇到了同样的问题并搜索了同样的问题。由于我找不到完全相同问题的答案,我试着自己试验。所以这就是我提出的但是使用你自己的例子:

在你的代码的这一部分:

window.fbAsyncInit = function()
{
FB.init({
    appId      : 'snipped',
    cookie     : false,
    xfbml      : true,
    version    : 'v2.1'
});

FB.getLoginStatus(function(response)
{
    statusChangeCallback(response);
});
};

我刚刚删除了部分FB.getLoginStatus,因为当你按下按钮时会调用它。所以你的代码变成了:

window.fbAsyncInit = function()
{
FB.init({
    appId      : 'snipped',
    cookie     : false,
    xfbml      : true,
    version    : 'v2.1'
});
};

就是这样!

这是一个我能想到的简单解决方案,因此我不确定它是否是最佳实践。由于这个问题是2个月之前,你现在可能已经找到了自己的解决方案,请分享你所做的事情,这样我可以放心,如果我做的是正确的。谢谢!