3

ユーザーが Web ページのいくつかのボタンのいずれかをクリックしたときに、Facebook ページに投稿できるようにしたい画像がいくつかあります。

<script>
FB.getLoginStatus(function(response)
{
  if ( response && response.status == 'connected' )
  {
    postPhotosToFacebook();
  }
  else
  {
    FB.login(function(response)
    {
      if ( response && response.status == 'connected' )
      {
        postPhotosToFacebook();
      }
    },
    {
      scope: 'publish_actions'
    });
  }
}, true);
</script>

とてもシンプルなコードです。ユーザーがログインしているかどうかを確認します。ログインしている場合は、写真を Facebook に投稿します。ログインしていない場合は が実行され、FB.login()ポップアップが表示され、ユーザーに Facebook にログインしてアプリに適切な権限を付与するよう求められます。ログインが完了した後、ユーザーが正常にログインして権限を承認した場合、アプリは上記と同じことを行い、写真を Facebook に投稿します。

ただし、FB.login()ポップアップはほとんどのブラウザーでブロックされているようです。どうしてこれなの?

私が見たいくつかの方法は、ユーザーがページを読み込んだときにログインしているかどうかを確認するだけでよいことを示唆しています。しかし、ユーザーはブラウザーのタブを Facebook に簡単に切り替えてログイン/ログアウトできるため、これがすべての場合に適切に機能するとは限りません。そのため、Web アプリのページに戻ると、実際には逆の場合でも、接続/切断されていると見なされる場合があります。

そのため、何かを投稿するたびにログインステータスを確認し、そうでない場合はユーザーにログインするオプションを提供する必要があります。ユーザーがページをロードするときにログインしていなかった場合、Facebookに切り替えてログインし、Webアプリページに戻ってボタンをクリックすると、実行しようとしますFB.getLoginStatus()が、ユーザーがすでにログインしているため、Javascript エラーが発生します。FB.login()FB.login()

この問題をどのように回避しますか?

4

1 に答える 1

0

非同期メソッドを呼び出すのではなく、それが null、未定義、または 0 でないFB.getLoginStatus()ことを確認するだけです。FB.getUserID()

var userID = FB.getUserID();
if(!!userID){
   //user is logged in
} else {
   //user is not logged in so call
}
于 2013-08-10T17:23:24.647 に答える