3

我有一些图像,我希望用户在单击我网页上的几个按钮之一时能够将其发布到他们的 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 应用程序页面,它可能会认为您已连接/断开连接,而事实恰恰相反。

因此,每次我想发布某些内容时,我都必须检查登录状态,并让用户选择登录(如果不是)。如果我放弃并在加载页面时用户未登录时FB.getLoginStatus()简单地运行,如果他们切换到 Facebook,然后登录,然后返回 Web 应用程序页面,当他们单击按钮时,它将尝试运行但您将收到一个 Javascript 错误,因为用户现在已经登录。FB.login()FB.login()

你如何解决这个问题?

4

1 回答 1

0

与其调用异步方法FB.getLoginStatus(),不如检查它FB.getUserID()是否为空、未定义或 0。

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