FB.init已被调用

pot*_*mok 52 facebook opengraph

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

FB.init has already been called - this could indicate a problem
Run Code Online (Sandbox Code Playgroud)

我很确定这种方法只被调用一次,而且似乎Facebook要求我在每次应用程序加载时调用一次(不是每页一次).

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

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

Tin*_*nou 156

从目前传递参数给js.src喜欢#xfbml=1&appId=X,FB SDK将自动初始化自身,从而FB.init将尝试重新初始化.所以在你的代码,您不必删除FB.init功能,只要确保你没有通过的参数以异步方式加载JS SDK的代码.

替换这个:

js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&appId=X";
Run Code Online (Sandbox Code Playgroud)

用:

js.src = "//connect.facebook.net/en_US/sdk.js";
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 我确认这解决了控制台中的错误消息. (5认同)
  • @potomok,如果你想在SDK初始化后立即渲染`xfbml`标签,只需在你的`FB.init`函数中添加参数`xfbml:true`. (3认同)
  • 这是正确的答案,OP是否可以标记它以帮助未来的用户?这正是我想要的. (3认同)
  • **更新**:您应该根据新文档将`all.js`替换为`sdk.js`. (3认同)

Dmi*_*nko 10

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

FB._initialized = false;
FB.init();
Run Code Online (Sandbox Code Playgroud)

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

我有基于AJAX的网站,每次加载页面后,我需要从HTML中呈现XFBML,这是我从AJAX请求中获得的(注释,如按钮和其他):

 <div class="fb-comments" data-href="{REMOVED}" data-num-posts="5" data-width="760" colorscheme="dark"></div>
Run Code Online (Sandbox Code Playgroud)

为此,您可以在需要渲染XFBML时运行此命令:

FB.XFBML.parse();
Run Code Online (Sandbox Code Playgroud)