FB.init已被调用

我正在build设Facebook的iframe应用程序。 我的应用程序被加载一次(我收到signed_request一次),然后我使用内部域链接浏览iframe中的页面。 我注意到我在Chrome和Firefox中看到了这些奇怪的消息

FB.init has already been called - this could indicate a problem 

我很确定,这个方法只被调用一次,似乎Facebook希望我每个应用程序加载调用一次(不是每页一次)。

 window.fbAsyncInit = function() { FB.init({ appId: param('facebook_app_id'), frictionlessRequests: true, oauth: true, channelUrl: site_url('/channel.html') }) } 

我在这里做什么错误(如果有的话)?

从传递参数到像#xfbml=1&appId=X这样的FB.init ,FB SDK会自动初始化自己,因此FB.init会尝试重新初始化。所以在你的代码中,你不必去除FB.init函数,只要确保你不会在JS SDK的asynchronous加载代码中传递参数。

replace这个:

 js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&appId=X"; 

带有:

 js.src = "//connect.facebook.net/en_US/sdk.js"; 

希望这可以帮助。

如果你真的需要多次调用init,你可以这样做:

 FB._initialized = false; FB.init(); 

但是对我来说没有意义,我有一点点不同的问题,但是它也和FB.init has already been called - this could indicate a problem消息。

我有基于AJAX的网站,在每次页面加载后,我需要从我从AJAX请求(评论,如button和其他)获得的HTML呈现XFBML:

  <div class="fb-comments" data-href="{REMOVED}" data-num-posts="5" data-width="760" colorscheme="dark"></div> 

要做到这一点,你可以在需要渲染XFBML时运行它:

 FB.XFBML.parse(); 

我也有这个问题。 我只是删除了FB.init({...})部分,它开始使用以下代码:

 window.fbAsyncInit = function () { FB.Event.subscribe('auth.logout', function () { // subscribe parts }); // here is where fb.init() code was }; (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=X"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); 

我想现在它自动进入代码,所以没有必要手动执行。 现在我的代码再次工作。 我希望这有帮助。