初始化后,Facebook API的FB对象为null

时间:2012-12-08 18:40:34

标签: javascript jquery facebook

Facebook API的FB对象似乎在init之后变为null。这是我正在使用的代码,它非常简单。问题是它说我的“/ me”响应未定义。我已登录,只是双重检查,所以情况并非如此。我已经允许使用我的数据。

为什么我的“/ me”响应未定义?

另外,有没有办法可以移动我的代码:

function testAPI() {
                        console.log('Welcome!  Fetching your information.... ');
                        FB.api('/me', function(response) {
                            console.log('Good to see you, ' + response.name + '.');
                        });
                    }

                    testAPI();

进入一个单独的.js文件(包含在函数中的代码),并在window.fbAsyncInit中调用函数时加载它?因为我尝试过的每一种方式都会导致失败。

<!doctype html>  
<html lang="en">  
    <head>  
        <meta charset="utf-8">
        <title>FB-Stuff</title>
        <link rel="stylesheet" href="style.css">
        <script type="text/javascript" src="jquery.js"></script>
    </head>
    <body>
        <div id="fb-root"></div>
        <script>
            window.fbAsyncInit = function() {
                FB.init({
                  appId      : '[my code]', // App ID
                  channelUrl : '//[my channel]', // Channel File
                  status     : true, // check login status
                  cookie     : true, // enable cookies to allow the server to access the session
                  xfbml      : true  // parse XFBML
                });

                function testAPI() {
                    console.log('Welcome!  Fetching your information.... ');
                    FB.api('/me', function(response) {
                        console.log('Good to see you, ' + response.name + '.');
                    });
                }

                testAPI();
            };

            // Load the SDK Asynchronously
            (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/en_US/all.js";
                d.getElementsByTagName('head')[0].appendChild(js);
            }(document));
        </script>
    </body>
</html>

编辑---------------------------------------------- ---------

现在我根本没有得到任何函数调用/错误消息。这是新代码:

<!doctype html>  
<html lang="en">  
    <head>  
        <meta charset="utf-8">
        <title>FB-Stuff</title>
        <link rel="stylesheet" href="style.css">
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript" src="mycode.js"></script>
    </head>
    <body>
        <div id="fb-root"></div>
        <script>
            window.fbAsyncInit = function() {
                FB.init({
                  appId      : 'xxx', // App ID
                  channelUrl : '//xxx/channel.html', // Channel File
                  status     : true, // check login status
                  cookie     : true, // enable cookies to allow the server to access the session
                  xfbml      : true  // parse XFBML
                });

                FB.getLoginStatus(function(response) {
                  if (response.status === 'connected') {
                        facebookInit();
                    }
                });
            };

            // Load the SDK Asynchronously
            (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/en_US/all.js";
                d.getElementsByTagName('head')[0].appendChild(js);
            }(document));
        </script>
    </body>
</html>

在mycode.js里面是:

function facebookInit(){
    function testAPI() {
        console.log('Welcome!  Fetching your information.... ');
        FB.api('/me', function(response) {
            console.log('Good to see you, ' + response.name + '.');
        });
    }
}

1 个答案:

答案 0 :(得分:1)

您需要将调用推迟到FB.api,直到 状态解决后 - 使用FB.getLoginStatus或收听其中一个事件。

不确定移动代码的意思 - 只要在JS SDK之前加载代码,就可以将代码放在任何地方。