2

私のアプリケーションには、次のような関数があります。

getProfile = function() {
  FB.api('/me', function(response) {
    console.log(response);
  });
  return false;
};

これは、JavaScript を介して Facebook Graph API から「me」オブジェクトを要求し、通常のリンクの onClick イベントにアタッチするか、コンソールから直接呼び出すと期待どおりに動作しますが、Facebook から呼び出そうとすると、ログインボタン:

  <fb:login-button onlogin="getProfile()">
    Get Profile
  </fb:login-button>

Facebook からログアウトし、その後ダイアログからログインした場合にのみ、期待どおりの応答が得られます。すでにログインしているときにボタンをクリックすると、次のようになります。

への 2 つの同一の要求

そして、応答をブラウザーにプッシュすると、次のようになります。

getProfile = function() {
  FB.api('/me', function(response) {
    console.log(response);
    var
      profile = document.getElementById('profile'),
      p = document.createElement('p');
    p.innerHTML = response.first_name;
    profile.appendChild(p);
  });
  return false;
};

もちろん、私の名前が入った 2 つの段落があります。

誰かが私が間違っていることを見つけることができますか? これまでのところ、私のグーグルでは、これは SDK がログイン イベントを処理する方法 (ページの読み込みごとに起動) に関連していると確信していますが、アプリケーション コードでそれをどのように説明するべきかわかりません。

4

1 に答える 1

4

Facebookにログインしているため、ページをロードするとonloginイベントが発生すると思います。次に、ユーザーがボタンをクリックすると、イベントもトリガーされます。そもそもログインしていない場合、onlogin イベントはロード時に発生しません。

更新: これを回避するには、 FB.getLoginStatusメソッドhttp://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/に基づく if ステートメント内を除いて、getProfile を onlogin イベントにフックしないでください。ログインしている場合は、onlogin イベントを添付しないでください。それ以外の場合は、onlogin で FB.Event.subscribe http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/を実行します。イベントとメソッドは、ユーザーが XFBML で生成されたログイン ボタンからログインするたびに実行されます。

FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
  //print the response data into the paragraph here
} else if (response.status === 'not_authorized') {
  // the user is logged in to Facebook, 
  // but has not authenticated your app
  FB.event.subscribe( 'auth.login', function(){
    getProfile();
  });
} else {
  // the user isn't logged in to Facebook.
}
});
于 2012-07-25T18:57:04.610 に答える