FB.login对话框未在Google Chrome上关闭

Jaf*_*fer 41 facebook google-chrome login

FB.login()在我的应用程序中调用了一个click事件.该对话框按预期弹出,但当用户登录Facebook(和/或授权应用程序)时,对话框不会关闭.相反,它加载一个白页(在对话框内),标题更改为XD代理.

这只发生在Google Chrome上(我现在使用的是适用于Windows 7的最新版本).

如果Chrome处于隐身模式,则不会发生这种情况.

fb-login"社交插件"在Chrome上运行良好.

为了进一步测试/调试,我创建了一个带有vanilla设置的新Facebook应用程序.我所做的唯一更改是在应用设置中设置网站网址.这是您可以用来重新创建此错误的HTML代码.

用于重新创建问题的示例代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Chrome Bug Test</title>
    </head>
    <body>
        <button onclick="dologin()">Login using Facebook</button>

        <div id="fb-root"></div>
        <script src="http://connect.facebook.net/en_US/all.js"></script>
        <script>
          FB.init({
            appId  : '[YOUR APP ID HERE]',
            status : true, // check login status
            cookie : true, // enable cookies to allow the server to access the session
            xfbml  : true  // parse XFBML
          });
        </script>

        <script type="text/javascript">
            function dologin(){
                FB.login(function(r){
                    if(console && console.log) {
                        console.log(r);
                    }
                });
            }
        </script>

    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

Facebook设置,我试过改变

  1. 设置站点域,没有任何改变.
  2. 使用自定义channelUrl和通道文件,也没有帮助.

在Facebook上追踪相关的错误

Stack Overflow上的相关问题

我见过很多人遇到过这个问题,但是我的错误是我无法找到具体的解决办法.Facebook尚未对错误报告做出回应.一种解决方案是摆脱基于Javascript的身份验证代码,并使用服务器端机制(Facebook PHP SDK)完成.由于时间限制,我想避免这种情况.

任何人有任何想法如何解决这个问题?

小智 11

我有一个类似的调用,FB.login()通过更改关闭对话框

onclick="dologin()"
Run Code Online (Sandbox Code Playgroud)

onclick="dologin(); return false;"
Run Code Online (Sandbox Code Playgroud)


Chr*_*edy 7

鉴于这篇文章的年龄,我猜这张海报解决了这个问题; 但是,鉴于这也是其他人寻求解决类似问题的资源,我认为我会将我的经验包括在内以防万一.

我发现导致同样问题症状的是我不小心忘记event.preventDefault();在jQuery中包含在我的"click"监听器处理程序中.Facebook登录对话框弹出,允许我登录但不会消失.问题是该网站正在执行默认表单后期操作,这会干扰Facebook回拨功能.


Joh*_*die 6

我有同样的问题.我做了两件事,首先我在FB.init()电话会议前添加了这一行:

FB.Flash.hasMinVersion = function () { return false; };
Run Code Online (Sandbox Code Playgroud)

然后我进入FB应用程序页面并添加了Site Domain(即test.com).

我认为网站域名设置是关键,但我不是100%肯定.我所知道的是,它似乎总是在包括Chrome在内的所有浏览器中关闭.


umb*_*rsw 5

关于上述问题的简短回答:

加载all.js脚本https.

<script src="https://connect.facebook.net/en_US/all.js"></script>
Run Code Online (Sandbox Code Playgroud)

如果您要解决原始问题的类似问题,请更长时间的回答:

使用Google Chrome尝试登录.登录并在屏幕上悬挂空白弹出窗口后,按F12.这为Chrome带来了开发人员工具.单击"控制台"选项卡,您将有望看到错误.您可能会看到的与XD(跨域)问题有关.

即使您的特定问题与我遇到的问题不同,上述内容也应该引导您朝着正确的方向前进.

我的问题/解决方案特定于Facebook C#SDK v6文档 - 教程代码使用以//开头的URL 加载all.js脚本,然后从与我的站点(即http)相同的方案加载脚本.登录后,弹出窗口试图将我从https Facebook登录重定向到我的http网站和宾果游戏,我们有XD问题.解决方案是从https://connect.facebook.net/en_US/all.js专门加载脚本,如下所示:

  // Load the SDK Asynchronously
  (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 = "https://connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));
Run Code Online (Sandbox Code Playgroud)

编辑:

经过一些考虑后,这种允许重定向到http的方法可能会通过允许其他人读取该请求中的数据然后重新使用来危害系统的安全性.我找不到任何相关的文档或示例,所以我无法以这种或那种方式结束,YMMV.


Jaf*_*fer 2

FB.init在为我解决问题后调用此代码片段。但其他解决方案似乎适用于不同的情况。

$.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());
if ($.browser.chrome || $.browser.msie) {
    FB.XD._origin = window.location.protocol + "//" + document.domain + "/" + FB.guid();
    FB.XD.Flash.init();
    FB.XD._transport = "flash";
  } else if ($.browser.opera) {
    FB.XD._transport = "fragment";
    FB.XD.Fragment._channelUrl = window.location.protocol + "//" + window.location.host + "/";
  }
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

22926 次

最近记录:

10 年,4 月 前