0

我已经编写了这段代码,但它只有在我已经登录 facebook 时才有效,否则会出现一个弹出窗口,需要我使用电子邮件和密码才能登录 facebook。

这是代码:

window.fbAsyncInit = function () {
    FB.init({
        appId: 'xxx',
        frictionlessRequests: true,
        status: true,
        cookie: true,
        xfbml: true,
        oauth: true
    });

    function update(response) {
        if (response.authResponse) {
            FB.api('/me', function (info) {
                login(response, info);
            });

        } else {

        }
    }

    FB.getLoginStatus(update);
};
(function () {
    var e = document.createElement('script');
    e.async = true;
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
}());


function login(response, info) {
    if (response.authResponse) {
        publish();
    }
}

function publish() {
    var publish = {
        method: 'feed',
        access_token: '<?php echo $token; ?>',
        message: 'How are you ?',
        name: 'hi friends',
        caption: 'yuhuuuuuuuu',
        description: (' '),
        link: 'http://www.example.com',
        picture: 'http://cdn1.hark.com/images/000/004/514/4514/original.jpg',
        actions: [{
            name: 'Hello',
            link: 'http://www.example.com/'
        }],
        user_message_prompt: 'Share on facebook'
    };

    FB.ui(
    publish, function (response) {
        if (response && response.post_id) {
            alert('Post was published.');

        } else {
            alert('Post was not published.');
        }
    });
}
4

1 回答 1

0

在您的update方法中,else您应该在空白处调用FB.login方法:

调用 FB.login 会提示用户使用 OAuth 对话框对您的应用程序进行身份验证。

但是,您不能只这样做:

function update(response) {
    if (response.authResponse) {
        FB.api('/me', function (info) {
        login(response, info);
        });

    } else {
        FB.login(function(response) {
            if (response.authResponse) {
                console.log("user is logged in!", response.authResponse);
            }
        });
    }
}

正如文档中所述:

调用 FB.login 会导致 JS SDK 尝试打开一个弹出窗口。因此,该方法只能在用户点击事件后调用,否则弹出窗口将被大多数浏览器阻止。

您必须向用户显示一个按钮或告诉他单击以登录的东西,然后您可以调用该FB.login方法。

于 2012-06-16T10:36:49.963 回答