Facebook:FB.api客户端类型错误:$ wnd.FB.Facebook未定义“为什么会出现此错误?

时间:2010-06-20 15:20:18

标签: gwt facebook

我们正面临着facebook的一个问题。 我们在我们的网络应用程序中集成了FB,当用户通过我们的网络应用程序中的fconnect登录时,他在我们的系统中注册(仅限第一次)只提供他的电子邮件ID。对于普通用户来说,很少有用户i / p在我们的系统中注册

我们的网络应用程序是用java [GWT2.0]开发的。

问题是FACEBOOK或normaluser在我们的网络应用程序中通过FB登录。(每次1个)

当用户刷新页面时,FB弹出窗口显示消息

“调试:加载FB.apiClient时出现异常TypeError:$ wnd.FB.Facebook未定义”

或有时 $ wnd.FB.Facebook.apiClient为空发生

我们上面错误[弹出]消息3次。

我们在html页面中使用了以下脚本 < script type =“text / javascript”language =“javascript”     SRC = “http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php” >

在我们的网页应用程序的仅1页中,即UserHome页面,我们显示用户信息。 在该页面上仅出现错误消息

我们使用以下GWT代码[来自Gwittit]在控制器类[Singleton类]

  

/ **        *当第一页上的所有数据都被加载时,函数被调用。        *        * * /       public void notifyFinishedLoadinPage(){           FacebookConnect.waitUntilStatusReady(新   RenderAppWhenReadyCallback());

}
     

私人MyLoginCallback   loginCallback = new MyLoginCallback();

class MyLoginCallback implements LoginCallback {

    public void onLogin() {
        isFacebookSign = true;
        fbLoggedInUserId = ApiFactory.getInstance().getLoggedInUser();

        for (FacebookObserver Observer : facebookObservers) {
            Observer.notifyFacebookLogin(true);
        }
    }
}

public void publishStream(final FacebookObserver fbObserver) {
    FacebookConnect.init(FacebookConstants.FACEBOOK_API_KEY,
     

“xd_receiver.htm”,loginCallback);

    FacebookConnect.requireSession(new
     

AsyncCallback(){

        public void onFailure(Throwable caught) {
            Window.alert("Require session failed: " + caught);
            GWT.log("Require session failed: " + caught, null);
        }

        public void onSuccess(Boolean isLoggedIn) {
            if (isLoggedIn) {
                for (FacebookObserver Observer :
     

facebookObservers){                           Observer.notifyPublishStream();                       }                   }               }           });

}

public void facebookConnection() {
    FacebookConnect.init(FacebookConstants.FACEBOOK_API_KEY,
     

“xd_receiver.htm”,loginCallback);   //服务器           FacebookConnect.requireSession(新   AsyncCallback(){

        public void onFailure(Throwable caught) {
            GWT.log("Require session failed: " + caught, null);
        }

        public void onSuccess(Boolean isLoggedIn) {
            if (loginCallback != null && isLoggedIn) {
                loginCallback.onLogin();
            } else {
                //User not logged in
            }
        }
    });
}

/**
 * Fired when we know users status
 */
private class RenderAppWhenReadyCallback implements
     

AsyncCallback {

    public RenderAppWhenReadyCallback() {
        FacebookConnect.init(FacebookConstants.FACEBOOK_API_KEY,
     

“xd_receiver.htm”,loginCallback);   //服务器           }

    public void onFailure(Throwable caught) {
        Window.alert("Unable to login through Facebook: " + caught);
    }

    public void onSuccess(ConnectState result) {
        if (result == ConnectState.connected) {
            isFacebookSign = true;

            for (FacebookObserver Observer : facebookObservers) {
                Observer.notifyFacebookLogin(true);
            }

            //History.newItem(HistoryConstants.USERHOME_PAGE_HISTORY_TOKEN);
        } else {
            //rightSideFlexTable.clearCell(0, 0);
            //rightSideFlexTable.setWidget(0, 0,
     

facebookPanel);                   isFacebookSign = false;

        }
    }
};

现在我们无法找到解决此问题的方法。

任何人都可以帮助我们尽快解决这个问题

希望 - 最佳合作

1 个答案:

答案 0 :(得分:0)

我们找到了上述问题的解决方案。

Facebook(登录)加载需要很少的时间。

在我们的网页中,我们获取fb详细信息,如fb用户loggedInId,Image等。 所以在页面加载时我们得到所有值为null因为facebook没有正确加载 所以我们得到 $ wnd.FB.Facebook.apiClient为空

调试:加载FB.apiClient时出现异常TypeError:$ wnd.FB.Facebook未定义“

为了解决这个问题,我们编写了一个方法,当用户刷新页面或正确完成facebook加载后调用。

  

public void notifyFacebookLogin(boolean isLogin){

     

Long fbLoggedInUserId = ApiFactory.getInstance()。getLoggedInUser();

     

if(fbLoggedInUserId!= null){

if (globalEndUserInfo == null) {
    globalEndUserInfo = new EndUserInfo();
    globalEndUserInfo.setFbLoggedInUserId(fbLoggedInUserId);
  }
     

}

     

//我们处理FB相关对象的任何地方的代码

     

}

现在,当用户刷新页面或fb需要时间加载

时,不会显示错误消息

通过这种方式我们解决了我们的问题。 :)