Facebook javascript在登录时,调用的函数运行两次,但应该只运行一次

Facebook javascript upon login a called function runs twice but should only run once

本文关键字:运行 两次 一次 javascript 调用 函数 登录 Facebook      更新时间:2023-09-26

我使用的代码来自:

http://thinkdiff.net/demo/newfbconnect1/jssdkouth2.html

将Facebook整合到我的app中,我有以下功能:

function login(response, info){
    if (response.authResponse) {
        showLoader(true);
        var accessToken                                 =   response.authResponse.accessToken;      
        fqlQuery();
        userInfo.innerHTML                             = 'Logged in';
        document.getElementById("fb-auth").setAttribute("class", "fb_logout");
        showLoader(false);
        document.getElementById('other').style.display = "block";
    }
}

function fqlQuery(){
    FB.api('/me', function(response) {
        //http://developers.facebook.com/docs/reference/fql/user/
        var query       =  FB.Data.query('select email from user where uid={0}', response.id);      
            alert("test");
    });
};

我遇到的问题是,当我登录函数fqlquery运行时,除了它运行两次,我怎么能防止这种情况?(即测试屏幕弹出两次)。

谢谢

这段代码运行两次的问题很可能是由于在您的页面上包含多个版本的SDK;例如,包括一个以上的喜欢按钮,包括一个社交插件和初始化一个应用程序等。

你可以解决SDK初始化不止一次的问题,或者你可以在你的fqlQuery函数中添加一个互斥检查,防止它运行不止一次:

function login(response, info){
    if (response.authResponse) {
        showLoader(true);
        var accessToken = response.authResponse.accessToken;      
        fqlQuery();
        userInfo.innerHTML                             = 'Logged in';
        document.getElementById("fb-auth").setAttribute("class", "fb_logout");
        showLoader(false);
        document.getElementById('other').style.display = "block";
    }
}
var hasRun = false;
function fqlQuery(){
    if (hasRun === false) {
        hasRun = true;
        FB.api('/me', function(response) {
            //http://developers.facebook.com/docs/reference/fql/user/
            var query =  FB.Data.query('select email from user where uid={0}', response.id);      
            alert("test");
    }
});

};