Facebook登录没有弹出窗口?

时间:2011-08-19 17:39:48

标签: javascript facebook

我正在尝试创建一个简单的Facebook应用程序,但是对于授权,它似乎总是被弹出窗口阻止程序阻止。因此我的代码是:

FB.init({
        appId  : THEAPPPIDDDD,
            status : true,
            cookie : true,
            xfbml  : true,
   });


FB.login(function(response) {
           if (response.authResponse) {
               FB.api('/me', function(response) {
               FB.logout(function(response) {
                               console.log('Logged out.');
                           });
                   });
           } else {
               console.log('User did not authorize.');
           }
       });

非常感谢任何帮助......谢谢

5 个答案:

答案 0 :(得分:29)

我知道这个问题可能是another question: Stop the facebook popup blocker的重复我将此重新发布给Dave Zhang。我已经为我的一个网站修改了这段代码。在以下代码中,替换YOUR_APP_ID和您的网站网址,然后Facebook登录将无弹出窗口。

//Javascript
var uri = encodeURI('http://example.com');
FB.getLoginStatus(function(response) {
    if (response.status === 'connected') {
        window.location.href=uri;
    } else {
        window.location = encodeURI("https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri="+uri+"&response_type=token");
    }
});

这只是直接重定向而不是打开弹出窗口。

答案 1 :(得分:3)

您应该点击某个按钮启动您的登录代码。作为处理FB时的一个好习惯,登录过程应始终由用户启动。

点击按钮调用您的代码,它应该解决您的问题。

答案 2 :(得分:1)

为避免通过弹出窗口进行登录,您应该在服务器端启动身份验证

答案 3 :(得分:1)

针对这个老问题的小更新,我发现它非常有用,我一直在收到错误消息,该错误不允许该域并且允许该域:

无法加载URL:此URL的域不包含在应用程序的域中。为了能够加载此URL,请将应用程序的所有域和子域添加到应用程序设置的“应用程序域”字段中。

因此,经过一番研究后,我发现您必须更改您的facebook应用设置以允许此类导航:

  1. 实施HTTPS
  2. 对重定向URI使用严格模式
  3. 嵌入式浏览器OAuth登录(如果您使用应用程序Webview) Settings needs to enable

答案 4 :(得分:0)

如果Popup操作不是源于用户引起的事件,则弹出窗口阻止程序将始终启动。例如,如果您尝试在加载事件上执行弹出,则浏览器很可能会使用弹出窗口阻止程序。另一方面,如果您在click事件或keydown事件上触发弹出窗口,则不太可能触发弹出窗口阻止程序。

您还可以使用一种方法让您的应用程序检测弹出窗口是否被阻止。您可以阅读有关here的更多信息。

正如其他答案中所提到的,如果您更愿意在没有弹出窗口的情况下执行身份验证过程,则需要使用OAuth在服务器端处理此问题。