在调用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>