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

时间:2012-10-09 23:49:18

标签: facebook

我在我的控制台中显示此消息

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插件的电话。

6 个答案:

答案 0 :(得分:92)

简短回答

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

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

完整答案

如果在哈希(#)符号后面提供参数,则加载时将由facebook脚本在内部调用

FB.init()。这里传递xfbml,因此调用FB.init()

(源代码:http://connect.facebook.net/fr_CA/all/debug.js本行发表时的第8699行)

如果未明确提供,则使用init()的默认参数:status arg默认为true - 这使得FB脚本在启动时调用getLoginStatus(),因为应用程序而抱怨该函数调用需要ID。

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

FB developers Social Plug-ins section中的“获取代码”向导会生成一个包含xfbml参数的网址,应该使用status=0参数恕我直言更新。

答案 1 :(得分:1)

如果在实施

解决方案后看到“无效的应用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()。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

在我的情况下,我看到控制台错误,但我也看到了Like按钮。

答案 4 :(得分:0)

您需要在调用fb登录状态函数

之前调用FB.init函数
    <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>

答案 5 :(得分: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>