Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 没有弹出窗口的Facebook登录?_Javascript_Facebook - Fatal编程技术网

Javascript 没有弹出窗口的Facebook登录?

Javascript 没有弹出窗口的Facebook登录?,javascript,facebook,Javascript,Facebook,我正在尝试制作一个简单的facebook应用程序,但对于授权,它似乎总是被弹出窗口拦截器阻止。因此,我的代码是: FB.init({ appId : THEAPPPIDDDD, status : true, cookie : true, xfbml : true, }); FB.login(function(response) { if (response.authResp

我正在尝试制作一个简单的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.');
           }
       });

任何帮助都将不胜感激。。。谢谢

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

如果弹出窗口操作不是由用户引起的事件引起的,则弹出窗口阻止程序将始终启动。例如,如果您尝试在加载事件时弹出,浏览器很可能会使用弹出阻止程序。另一方面,如果在单击事件或按键事件中触发弹出窗口,则触发弹出窗口阻止程序的可能性较小

您还可以使用一种方法让应用程序检测弹出窗口是否被阻止。你可以阅读更多关于这方面的内容


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

我知道此问题可能与我转发此问题的问题重复,以帮助Dave Zhang。我已经为我的一个站点修改了此代码。在下面的代码中,替换你的应用程序ID和网站url,那么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");
    }
});

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

您应该在单击某个按钮后启动登录代码。作为处理FB的良好实践,登录过程应始终由用户启动


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

对于这个我发现非常有用的老问题,我不断收到错误,该域是不允许的,它是允许的:

无法加载URL:此URL的域不包括在应用程序的域中。要加载此URL,请将应用程序的所有域和子域添加到应用程序设置中的应用程序域字段。

所以,经过一番小调查后,我发现你必须更改你的facebook应用程序设置以允许这样的导航:

  • 强制使用HTTPS
  • 对重定向URI使用严格模式
  • 嵌入式浏览器OAuth登录(如果您使用app webview)

  • 我认为,如果没有设计的弹出窗口,就不可能登录Facebook。这将是糟糕的安全。要防止大多数弹出窗口阻止程序阻止弹出窗口,您需要确保弹出窗口是用户单击的直接结果。非用户启动的弹出窗口往往会被阻止。在FaceBook中的iframe内重定向时,您应该始终使用
    top.location.href='URI\u to\u REDIRECT'
    。我尝试使用重定向方法,但收到的错误是,我的域未包含在应用程序中。但我已经做到了。查看此图像查看我声明应用程序域的第二个图像-1小时前Abhay Srivastav如果您尚未登录,则会将您发送到一个页面,显示“未登录:您未登录。请登录并重试”。某些应用程序只是客户端应用程序-因此使用按钮可避免弹出问题。