2012-12-12 38 views
1

我从按钮点击事件调用Facebook JS SDK的FB.getLoginStatus。我的问题是,如果status参数设置为true,则浏览器弹出窗口阻止程序会被触发,从而阻止登录对话框显示。但是,当我的状态为false时,弹出窗口阻止程序不会被触发。 我需要的状态为true,因为我的网站需要知道用户是否登录Facebook而无需刷新页面。 False参数值意味着FB仅获取缓存的登录状态,如果用户在您的网站上仍然退出Facebook时可能会出错。FB.getLoginStatus触发浏览器弹出窗口阻止程序。我怎样才能阻止它?

我该如何解决这个问题?

这里是一些代码,说明了这个问题

$('.my-button').click(function() { 

      FB.getLoginStatus(function (response) { 

       if (response.status != 'connected') { 

        FB.login(function (r) { 
         if (r.status == 'connected') { 
          alert('logged in'); 
         } 
        }); 
       } 

      }, true); 

     }); 

回答

1

这可能是因为当你通过forceCheck到getLoginStatus,回调异步调用,这切断其与“点击”事件有关。浏览器或弹出窗口拦截器无法在调用堆栈中找到用户启动的点击事件,因此它会阻止弹出窗口。我目前正在被同样的问题困扰。

选项:

1)直接调用FB.login。

缺点:即使是登录用户也会弹出难看的弹出窗口。 2)在用getLoginStatus检测到用户没有登录(或者应用程序未被授权)时,在$('。my-button')附近的某处插入一个单独的登录按钮,可能会显示一条消息,说明用户必须点击登录按钮才能与Facebook连接。在第二个按钮的点击处理程序中直接调用FB.login()。

缺点:-50〜转化率

我现在将尝试2)并报告结果。

+1

在用户点击按钮之前(例如在页面加载时),可能会调用FB.getLoginStatus,将结果存储在变量中,并且能够根据变量状态直接在Click处理程序中调用FB.login ,不是吗? – Pierre

相关问题