Javascript FB.Event.subscribe不工作

Javascript FB.Event.subscribe不工作,javascript,html,facebook-graph-api,facebook-javascript-sdk,Javascript,Html,Facebook Graph Api,Facebook Javascript Sdk,我正在一个网站上工作,希望给我的用户一个使用facebook登录的选项。 我成功登录,但事件对我不起作用。 每当我登录时,都没有调用函数“login”……我尝试将此登录函数分配给其他按钮以手动检查,警报起作用,但没有得到任何响应。 这是我的代码: <div id="fb-root"></div> <script type="text/javascript"> window.fbAsyncInit = function() { FB.init({appId

我正在一个网站上工作,希望给我的用户一个使用facebook登录的选项。
我成功登录,但事件对我不起作用。

每当我登录时,都没有调用函数“login”……我尝试将此登录函数分配给其他按钮以手动检查,警报起作用,但没有得到任何响应。

这是我的代码:

<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
   FB.init({appId: MY_APP_ID, status: true, cookie: true, xfbml: true});

   FB.Event.subscribe('auth.login', function(response) {
      login();
     });
};

 function login(){
    FB.api('/me', function(response) {
   alert('You have successfully logged in, '+response.name+"!");
  }); 
 }

 (function() {
   var e = document.createElement('script');
   e.type = 'text/javascript';
   e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    e.async = true;
   document.getElementById('fb-root').appendChild(e);
 }());     </script>

<fb:login-button autologoutlink='true'   
  perms='email,user_birthday,status_update,publish_stream'></fb:login-button>

window.fbAsyninit=函数(){
init({appId:MY_APP_ID,status:true,cookie:true,xfbml:true});
FB.Event.subscribe('auth.login',函数(响应){
登录();
});
};
函数登录(){
FB.api('/me',函数(响应){
警报('您已成功登录,'+response.name+“!”);
}); 
}
(功能(){
var e=document.createElement('script');
e、 类型='text/javascript';
e、 src=document.location.protocol+'//connect.facebook.net/en_US/all.js';
e、 异步=真;
document.getElementById('fb-root').appendChild(e);
}());     

这是facebook应用程序设置:

您是否尝试过将all.js脚本加载到
而不是
#fb root
?使用以下命令:

  (function(d){
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/es_LA/all.js";
     d.getElementsByTagName('head')[0].appendChild(js);
   }(document));
而不是:

 (function() {
   var e = document.createElement('script');
   e.type = 'text/javascript';
   e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    e.async = true;
   document.getElementById('fb-root').appendChild(e);
 }());
[编辑:更新样本]

SDK将元素插入到fb根目录中,这些元素应该相对定位 指向正文或相对于靠近页面顶部的元素

也可能会替换SDK源代码。
资源:

--
你能试着订阅其他活动,看看它是否有效吗

FB.Event.subscribe('auth.statusChange', function(response) {
  // do something with response
});
从Facebook文档(尝试订阅此文档)

验证。验证响应更改
任何与身份验证相关的更改都会触发此事件,因为它们都会影响会话:登录、注销、会话刷新。只要用户在应用程序中处于活动状态,会话就会随着时间的推移而刷新

身份验证状态更改
通常,您需要使用auth.authResponseChange事件。但在极少数情况下,您需要区分这三种状态:
1.已连接
2.已登录Facebook,但未与应用程序连接
3.根本没有登录Facebook

场景1(新用户)

Facebook登录按钮的文本:“登录”
用户状态:用户未连接

现在,用户单击login并完成登录流

按钮的文本变为“注销”,这是唯一触发
'auth.login'
的时间

FB.Event.subscribe('auth.login', function (response) {     
        // do something with response                   
        if (response.status === 'connected') {
            // user connected                        
            FB.api('/me', function (response) {
                alert(response.name + " " + response.id);
            });
        }
});
场景2(现有用户)

如果登录到Facebook并已授权您的应用程序的用户访问了您的应用程序,则该用户会自动连接,登录按钮的文本为“注销”。
在这种情况下,将以下代码添加到
fbAsyninit函数中

            FB.getLoginStatus(function (response) {
                if (response.status === 'connected') {
                    // connected
                    alert(response.name + " " + response.id);
                }
            });

FB.getLoginStatus
在每次页面刷新时都会被调用,但您也可以通过将其嵌入javascript函数在应用程序中随时调用它。

仍然不起作用……这也是我在手动检查时收到的错误->代码:2500消息:“必须使用活动访问令牌查询有关当前用户的信息。”键入:“OAutheException”“您订阅的事件
auth.login-在身份验证状态从未知更改为已连接时激发。”。也许你一直都有联系?其次,无论你试图访问什么,当用户通过身份验证时都需要accessToken:我已经用facebook应用程序设置更新了我的问题。不,我的意思是,你说“无论何时登录,函数“login”都没有调用”,下面的
FB.Event.subscribe('auth.login',{…})
仅当您未登录并更改为登录时才会触发。请参阅更新的答案。