Facebook FB.login()弹出窗口仅在移动web应用程序中被阻止

Facebook FB.login()弹出窗口仅在移动web应用程序中被阻止,facebook,mobile,facebook-javascript-sdk,Facebook,Mobile,Facebook Javascript Sdk,对于使用Facebook Javascript SDK的移动web应用程序,我们希望检查用户的登录状态,然后在必要时显示Facebook登录对话框。以下代码在web应用程序中给定按钮的单击处理程序中运行: $('#button').click(function() { FB.getLoginStatus(function(response) { if (response.status === 'connected') { // do somethi

对于使用Facebook Javascript SDK的移动web应用程序,我们希望检查用户的登录状态,然后在必要时显示Facebook登录对话框。以下代码在web应用程序中给定按钮的单击处理程序中运行:

$('#button').click(function() {
    FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            // do something with the logged in and authorized user
        } else if (response.status === 'not authorized') {
            // logged in but has not authorized our app
        } else {
            // not logged in
            FB.login();
        }
    });
});
确保用户没有登录到Facebook,按下按钮时,它可以正常工作,并显示桌面web浏览器的登录对话框,但移动web则不会(至少对于各种浏览器上的Android,我目前没有访问iPhone的权限)。移动web应用程序上没有显示任何内容,当我禁用弹出窗口阻止程序时,我会收到一条提示,询问我是否允许此弹出窗口,这是可行的


有人知道为什么行为不同和/或已知/标准的解决方法是什么吗?谢谢

您的代码不会在所有桌面浏览器中运行。某些浏览器(移动和桌面)会阻止弹出窗口,除非它们是由用户单击启动的。比如说,

$('#mybutton').click(function() {
   FB.login();
});

将起作用,因为只有在响应用户的单击时才会调用
FB.login()
函数。因此,要修复您的代码,请使用显示“登录”按钮和鼓励用户单击该按钮的文本的代码替换
FB.login()
调用。

Hi Gil,感谢您的回复。我正在更新代码,因为我忘了指定调用代码以响应用户的单击。如果用户单击触发一个AJAX调用(FB.getLoginStatus),其响应触发实际的弹出窗口(FB.login),这将如何影响弹出窗口阻塞?我所说的仍然适用。由于您正在从回调函数调用
FB.login()
,浏览器认为这与用户的单击操作无关。明白了。如果可能的话,我们试图避免让用户单击其他按钮,因此我将探索另一种改进此流程的方法。在页面加载时调用getLoginStatus(),以便当用户单击按钮时,您已经知道状态。哈哈,我刚刚做了更改,谢谢!如果我想做些别的事情,比如在用户单击多个按钮中的一个按钮时启动FB对话框,但必须首先进行AJAX调用以检索动态(基于他们按下的按钮)消息文本,该怎么办?