1

我成功地将 FBConnect 集成到我的应用程序中。连接和注册页面工作正常。

但是一段时间以来,当我点击 facebook 按钮时,我绑定的事件不再引发。

<script src="http://connect.facebook.net/fr_FR/all.js" ></script>
<script type="text/javascript">
//console integration
if(typeof console !== 'object')
console = {};
if((typeof console.debug) !== 'function'){
    if(typeof opera === 'object'){ 
        console = {
            debug : function(){return opera.postError(arguments);},
            info : function(){this.debug('[INFO] ',arguments);},
            log : function(){this.debug('[LOG] ',arguments);}
        };
    }
    else{ 
        console = {
            debug : function(){return true;},
            info : function(){return true;},
            log : function(){return true;}
        };
    }
}

/**
 * Fonction called to init and manage FB Connection
 */
handleFacebook();
$('#fb-button').click(function(){
    alert('ok');
    fbGetLoginStatus();
});

/**
 * 
 */
function handleFacebook() {
    if(!window.fbApiInit) {
        FB.init({appId: 'myAppId', xfbml: true, cookie: true});
        fbApiInit = true;
    }
}

function fbGetLoginStatus() {
    FB.getLoginStatus(function(response) {
        onStatus(response); // once on page load
        FB.Event.subscribe('auth.statusChange', onStatus); // every status change
    });
}

/**
* This will be called once on page load, and every time the status changes.
*/
function onStatus(response) {
    console.info('onStatus', response);
    if (response.status == 'connected') {
        console.info('User logged in');
        if (response.perms) {
            console.info('User granted permissions');
        }else{
            console.info('User has not granted permissions');
        }
        getAccountInfo();
    } else {
        console.info('User is logged out');
    }
}

/**
* This assumes the user is logged out, and renders a login button.
*/
function showLoginButton() {
    var button = '<fb:login-button perms="email" />';
    $('#fb-login-button').html(button);
    FB.XFBML.parse(document.getElementById('fb-login-button'));
}

function getAccountInfo() {
    FB.api(
        {
        method: 'fql.query',
        query: 'SELECT username, first_name, last_name, uid, email, sex  FROM user WHERE uid='+FB.getUserID()
        },
        function(response) {
            console.info('API Callback', response);
            var user = response[0];

            $('#usernamefb').val(user.username);
            $('#mailfb').val(user.email);

            $('#facebook-connect-form').submit();
        }
    );
}
</script>
<div id="fb-login-button">
    <fb:login-button perms="email" id="fb-button" />
</div>
<form method="post" action="/facebook-connect" id="facebook-connect-form">
    <input type="hidden" id="usernamefb" name="usernamefb"/>
    <input type="hidden" id="mailfb" name="mailfb"/>
</form>

我注意到$('#fb-button').click事件中的警报函数从未被调用。这里没有显示,但我在我的文件中包含了 jQuery 库。任何想法 ?

感谢您的回答。

4

1 回答 1

0

Facebook改变了他们的按钮,我没有找到一种方法在他们改变之后将点击事件绑定到它。

我将我的网站更改为订阅加载时的 FB 事件。初始化 FB 时,您必须将选项“状态”设置为 false 以防止在初始化时自动登录状态检查!

function fbInit() {
        window.fbAsyncInit = function () {
            FB.init({
                appId: 'XXX',
                status: false,
                cookie: true,
                xfbml: true
            });

            //auth.statusChange
            FB.Event.subscribe('auth.authResponseChange', function (response) {
                if (response.status.indexOf('connected') != -1) {
                    // the user is logged in and has authenticated your
                    // app, and response.authResponse supplies
                    // the user's ID, a valid access token, a signed
                    // request, and the time the access token 
                    // and signed request each expire
                    var uid = response.authResponse.userID;
                    var accessToken = response.authResponse.accessToken;

                    //Handle the access token
                    jQuery.ajax({
                        url: 'token_handler.ashx',
                        type: 'POST',
                        data: "accessToken=" + accessToken,
                        success: function (msg) {

                        }
                    });

                } else if (response.status.indexOf('not_authorized') != -1) {
                    // the user is logged in to Facebook, 
                    // but has not authenticated your app
                } else {
                    // the user isn't logged in to Facebook.
                }
            });
        };
    (function (d) {
        var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
        if (d.getElementById(id)) { return; }
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        ref.parentNode.insertBefore(js, ref);
    } (document));
}
于 2012-07-31T09:55:50.183 回答