5

下面将登录事件绑定到一个 div。如果我点击它,我会得到预期的 js sdk 登录弹出窗口。但是,在使用我的凭据提交弹出窗口后,弹出窗口变为白色并且不会关闭。如果我刷新页面,我已登录,但它不会像您预期的那样自动刷新。有人有什么想法吗?


编辑:相同的代码(具有不同的应用程序 ID 和域凭据)在不同的服务器上工作。这让我相信我的问题可能与下面的代码无关。是否有任何应用程序或服务器配置可能导致登录弹出窗口无法关闭/更新?


<!DOCTYPE html>
<html class="no-js ie ie10plus" lang="en" xmlns:fb="http://www.facebook.com/2008/fbml">
    <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# object: http://ogp.me/ns/object#">
        <script src="http://ajax.aspnetcdn.com/ajax/modernizr/modernizr-2.0.6-development-only.js"></script>
    </head>
    <body>
        <div id="fb-root"></div>
        <div id="fbLogin">Test login link</div>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" ></script> 
        <script>               
              var fbmm = {};

              window.fbAsyncInit = function() {
                FB.init({
                  appId      : '339910146083688', // App ID
                  cookie: true, 
                  xfbml: true,
                  status: true,
                  oauth: true
                });

                $(document).ready(function(){
                    $("#fbLogin").click(function(){
                        console.log('test');
                         FB.login(function(response) {
                           if (response.authResponse) {
                             console.log('Welcome!  Fetching your information.... ');
                             FB.api('/me', function(response) {
                               console.log('Good to see you, ' + response.name + '.');
                             });
                           } else {
                             console.log('User cancelled login or did not fully authorize.');
                           }
                         });
                    });
                });

              };

          (function(d){
             var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
             if (d.getElementById(id)) {return;}
             js = d.createElement('script'); js.id = id; js.async = true;
             js.src = "//connect.facebook.net/en_US/all.js";
             ref.parentNode.insertBefore(js, ref);
           }(document));
        </script>
    </body>
</html>
4

5 回答 5

5

在 80 或 443 以外的端口上进行测试时存在一些已知问题。尝试在这些(“正常”)HTTP(S) 端口之一上设置您的测试机器,看看问题是否仍然存在。

于 2012-07-04T09:28:16.453 回答
1

我的猜测是,由于您没有提供频道 URL,因此出现了问题,如文档中所述(在频道 URL 部分下)

频道文件解决了某些浏览器中跨域通信的一些问题。
...
channelUrl 参数是可选的,但建议使用。

即使您的问题未在频道文件解决的三个问题中列出,但我曾经遇到过与您相同的问题并通过添加频道解决了它,尽管这是前一阵子,所以我不是 100% 它是相同的。
那里解释了如何创建频道文件,您需要稍微更改一下您的javascript:

FB.init({
    appId: '339910146083688', // App ID
    cookie: true, 
    xfbml: true,
    status: true,
    oauth: true,
    channelUrl: YOUR_CHANNEL_URL
});
于 2012-07-04T19:30:48.353 回答
1

我接到了类似的电话,FB.login()要求通过更改来关闭对话框

onclick="loginviafb()";

onclick="loginviafb(); return false;"
于 2016-09-16T11:32:18.153 回答
0

您可以尝试使用应用设置中的身份验证对话框自定义选项自定义应用登录。在那里你可以配置你想要的权限,如果用户没有登录/授权你的应用程序,facebook 将自动重定向到 app-auth 页面。您必须首先从应用程序设置 > 身份验证对话框中启用它。请参阅下图中的单击此处注释。希望这可以帮助。 在此处输入图像描述

于 2012-07-04T20:43:56.533 回答
0

当开发网站地址是http://localhost我在 windows 主机文件中定义了一个主机并且它工作正常时,我遇到了同样的问题。

于 2014-09-29T12:23:56.850 回答