控制台中出现了“在调用FB.init()之前调用了FB.getLoginStatus()”的错误信息。

40

我正在尝试检查用户是否已经登录了我的应用程序,但是控制台会提示以下错误:

在调用FB.init()之前调用FB.getLoginStatus()。

setSize 看起来工作正常(虽然高度不完全是1,710,但肯定在1,500左右),所以我不明白为什么会出现 getLoginStatus() 的错误。

我也通过 appID(下面已删除)进行了双重检查,而且肯定是正确的。该脚本是通过以下方式包含的:<script src="file.js" type="text/javascript"></script>,位于我的<body><div id="fb-root"></div>标签之下。

window.fbAsyncInit = function() {
FB.init({
    appId      : 'APPID', // App ID
    status     : true, // check login status
    cookie     : true, // enable cookies to allow the server to access the session
    oauth      : true, // enable OAuth 2.0
    xfbml      : true  // parse XFBML 
});

FB.Canvas.setSize({width: 520, height: 1710});

FB.Canvas.setAutoResize(100);

FB.getLoginStatus(function(response) {
    if (response.authResponse) {
        // logged in and connected user, someone you know
        alert("?");
    } else {
        // no user session available, someone you dont know
        alert("asd");
    }
});
};

你在哪里加载API? - Abby
在头部添加:<script src="http://connect.facebook.net/en_US/all.js"></script> - mauzilla
2个回答

31

您需要异步加载 API。尝试删除 <script src="connect.facebook.net/en_US/all.js"></script> 并更新 JS 代码如下:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'YOUR_APP_ID', // App ID
      channelURL : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      oauth      : true, // enable OAuth 2.0
      xfbml      : true  // parse XFBML
    });

    //
    // All your canvas and getLogin stuff here
    //
  };

  // 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>

哦,而且请查看文档


我可以将这段代码与我的jQuery代码混合使用吗?我有一个包含正在运行的jQuery脚本的脚本。我可以将此代码添加到其中,还是必须放置在主体中的fb-root div下方? - mauzilla
试一下,看看会不会行。只要你的 fb 进程按正确顺序运行,我想不出任何原因它不能工作。 - Abby
4
jQuery也可以加载JS文件:$.getScript(document.location.protocol + '//connect.facebook.net/en_US/all.js'); - lulalala
我的问题是我从未打算制作FB应用程序,但我仍然遇到了错误。我没有任何应用程序ID,因此无法应用您建议的内容 :( - user767124

27

如果您在调用FB.init时没有提供appId,也会发生此错误。示例:

    FB.init({
        appId: ''
        , channelUrl: '//domain/channel.html'
        , status: true
        , cookie: true
    });

将导致:

在调用FB.init()之前调用了FB.getLoginStatus()。


1
谢谢您加入这个。我已经进行了异步更改,但仍然出现错误。 - Brett DeWoody
我也遇到了一个误导性的错误信息。这个答案帮了我。 - workwise

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接