41

我的控制台中有这条消息

FB.getLoginStatus() called before calling FB.init(). 

我的代码

<div id="fb-root"></div>
<script>
        // 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 = \"//connect.facebook.net/fr_FR/all.js#xfbml=1\";
           ref.parentNode.insertBefore(js, ref);
         }(document));
</script>
<div class="fb-like" data-send="false" data-layout="button_count" data-width="100" data-show-faces="false"></div>

我不明白为什么。在我的所有网站中,我只有一次调用这个 facebook like 插件。

4

6 回答 6

91

简短的回答

添加&status=0到您的js.srcURL 以使警告消失,即:

//connect.facebook.net/fr_FR/all.js#xfbml=1&status=0

完整答案

FB.init()如果在井号 (#) 符号后提供参数,将在加载时由 facebook 脚本在内部调用。这里xfbml通过了,所以FB.init()才叫。

(源代码:http ://connect.facebook.net/fr_CA/all/debug.js行 8699 在这篇文章的时间)

如果未明确提供,则使用 init() 的默认 args:statusarg default 是true- 这会getLoginStatus()在启动时调用 FB 脚本,这会报错,因为该函数调用需要应用程序 ID。

FB 社交插件不需要应用程序 ID - 它们被呈现为源自 facebook.com 的 iframe,因此它们可以访问 FB 登录状态和 cookie。

FB 开发人员社交插件部分中的“获取代码”向导会生成一个带有xfbml参数的 URL,它应该使用status=0参数恕我直言更新。

于 2013-05-16T17:09:09.793 回答
1

如果您在实施解决方案后看到“Invalid App ID”的警告

https://stackoverflow.com/a/16593474/1428052

然后将 appId 添加到您的 js.src URL 以使其适合您,即:

//connect.facebook.net/en_US/all.js#xfbml=1&status=0&appId=YOUR_APP_ID

此 appId 的存在将自动调用带有基本应用设置的 FB.init()。

于 2014-10-02T12:19:04.123 回答
0

您需要FB.init在调用 fb 登录状态函数之前调用函数

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

    // 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 = \"//connect.facebook.net/fr_FR/all.js#xfbml=1\";
       ref.parentNode.insertBefore(js, ref);
     }(document));
  </script>
于 2013-02-15T06:41:43.913 回答
0

我在这里回答了一个类似的 SO 问题。
实际上,如果您也根本看不到 Like 按钮,那么这个问题与另一个问题完全相同。

就我而言,我看到了控制台错误,但我看到了 Like 按钮。

于 2012-10-16T09:57:55.507 回答
0

警告:下面有一些猜测。如果不合适,我可以删除它。

我认为问题在于异步加载 SDK,但内联的 Like 按钮。然后,Like 按钮可能会在脚本加载之前调用 getLoginStatus。您可以通过注释掉异步加载 SDK 的脚本来测试/验证这一点,而是将其作为正常的脚本标签包含在页头中。

当然,这只是简单的测试方法。如果您可以验证问题是否存在,那么解决它的“正确”方法可能是确保在 SDK 加载之前不会出现在页面上的 Like 按钮。

于 2012-10-10T02:07:14.560 回答
0

我使用以下代码使其工作:

<!--[if IE]>
<script src="https://connect.facebook.net/pt_BR/all.js?xfbml=1" type="text/javascript"></script>
<![endif]-->
<script src="https://connect.facebook.net/pt_BR/all.js#xfbml=1" type="text/javascript"></script>

 <div class="fb-like"
          data-href="https://www.myurl.com" 
          data-send="true" data-layout="button_count" 
          data-width="50" data-show-faces="false"></div>
于 2013-05-13T20:37:32.817 回答