2012-03-23 8 views
4

Facebook JS SDKで表示されているポップアップのブロックに問題があります。ドキュメントを読んだ後、JS SDKの呼び出しはユーザーのクリック後でなければならないことを理解しています。 このコードは正しく動作し、ブラウザがポップアップをブロックしない:facebook SDKで表示されるブロッキングポップアップの防止

function Login() { 
    FB.login(function (response) { 
     if (response.authResponse) { 
      DoSmth(response.authResponse.accessToken); 
     } 
    }, { scope:'user_birthday, publish_stream' }); 
} 

しかし、私は(。元のために壁に掲示、ユーザデータを取得する)どこでも、このコードを使用する場合、ポップアップはすべての場合に表示されますたとえユーザーが既にFacebookにログインしていても。私は、それはうまくないと思う。ユーザがすでにログインしている場合、表示されませんこの場合、ポップアップで

function CheckOrLogin() { 
    FB.getLoginStatus(function (response) { 
     if (response.status === 'connected') { 
      DoSmth(response.authResponse.accessToken); 
     } 
     else { 
      FB.login(function (response) { 
       if (response.authResponse) { 
        DoSmth(response.authResponse.accessToken); 
       } 
      }, { scope:'user_birthday, publish_stream' }); 
     } 
    }, true); 
} 

しかし、ユーザーはログインfacebookでログインされていない場合:確認するには

、そのユーザがすでにログインし、私はこのコードを使用します。 、この条件(

+0

同じ問題が発生しています。 – Multitut

答えて

0

はログインをチェックしてみてください?(のResponse.Status ===)はfalseを返します。そして、ブラウザはFB.loginで表示されますBLOCKポップアップ、となります。これを防ぐためにどのような方法がある場合ページがロードされたときにすぐにステータスを取得し、結果とaccessTokenを変数に格納します。

var userData = {isConnected: false, token: null}; 
FB.getLoginStatus(function (response) { 
    userData.isConnected = (response.status === 'connected'); 
    if (userData.isConnected) { 
     userData.token = response.authResponse.accessToken; 
    } 
}, true); 

ユーザーがボタンをクリックすると、変数の値がチェックされます。

function CheckOrLogin() { 
    if (userData.isConnected) { 
     DoSmth(userData.token); 
    } else { 
     FB.login(function (response) { 
      if (response.authResponse) { 
       DoSmth(response.authResponse.accessToken); 
      } 
     }, { scope:'user_birthday, publish_stream' }); 
    } 
} 
関連する問題