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

我在我的控制台中有这个消息

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的电话,就像我所有网站上的插件一样。

简短的回答

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

//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 line 8699在这篇文章的时间)

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

FB社交插件不需要应用程序ID – 它们被渲染成源自facebook.com的iframe,所以FBlogin状态和cookie可以被访问。

FB开发者社交插件部分的“获取代码”向导生成一个带有xfbml参数的URL,它应该用status=0参数来更新。

如果在执行解决scheme后看到“无效的应用程序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()与基本的应用程序设置。

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

我假设问题在于加载SDKasynchronous,但喜欢button内联。 然后,在加载脚本之前,Likebutton可能会调用getLoginStatus。 您可以通过注释脚本来asynchronous加载SDK来testing/validation,而是将其作为普通脚本标记包含在页头中。

当然,这只是简单的testing方法。 如果您可以validation问题所在,则解决此问题的“正确”方法可能是确保在加载SDK之前,Likebutton不会出现在页面上。

我在这里回答了类似的SO问题。
实际上,如果你还看不到Likebutton,那么这个问题就是另一个问题的完全重复。

在我的情况下,我看到控制台错误,但我看到了Likebutton。

您需要在调用fblogin状态函数之前调用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> 

我得到它使用这个代码工作:

 <!--[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>