FB init函数提供错误的版本错误

abi*_*iku 50 javascript facebook-javascript-sdk

我正在使用Facebook JS sdk,我今天创建了一个新的应用程序.一切都配置正确.使用init函数,如:

window.fbAsyncInit = function() {
    FB.init({
      appId      : 'xxxx', // App ID
      status     : false, 
      version:  'v2.0',
      cookie     : true, 
      xfbml      : false  // parse XFBML
    });
};

    (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/pl_PL/sdk.js";
         fjs.parentNode.insertBefore(js, fjs);
       }(document, 'script', 'facebook-jssdk'));
Run Code Online (Sandbox Code Playgroud)

但我有一个错误:"未捕获错误:init没有调用有效版本"正在尝试其他版本,如:2.1,2.2仍然没有运气.我在这做错了什么?

Mat*_*ner 33

**免责声明 - 这纯粹是猜测.似乎已经解决了我的问题.


我在最近的一个项目中遇到过这个问题.我认为这是一个延迟问题.Facebook SDK要求<div id="fb-root"></div>在页面上.这应该是打开body标签后的第一件事.在此之后,您可能会看到您的初始化代码.

对我来说,这个问题并不一致.我偶尔会看到这个bug,有时我也不会.因此,我的结论是延迟问题.如果SDK找不到fb-root,那么必须创建一个.在这里,我认为存在延迟问题.

尝试在打开身体标签之后添加它,但在你的身体之前添加FB.init({});.

<div id="fb-root"></div>
Run Code Online (Sandbox Code Playgroud)

这似乎已经解决了我的问题,并希望也能帮助其他人.在V1.0文档讨论的原因fb-root,但V2.0文档没有提及该项目时,可能是因为在init脚本将其添加为你,如果它没有找到它.

  • 嗯今天没用.我按页脚然后工作. (2认同)

n_y*_*n_y 26

我通过使用all.js而不是sdk.js来实现它.
在您的情况下,它看起来像:

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

代替

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

  • 完美的!对我有用。谢谢 (2认同)

Myt*_*ish 11

添加&version=v2.0到js.src,如下所示:

(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/sdk.js#xfbml=1&version=v2.0";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
Run Code Online (Sandbox Code Playgroud)


Wim*_*mer 5

这个问题困扰了我一段时间.我尝试了这里列出的许多想法,例如更改版本号和移动/删除fb-root.

最终对我window.fbAsyncInit有用的是删除整个函数并init在哈希中指定属性sdk.js.例如:

<script type="text/javascript">
    (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 = "https://connect.facebook.net/en_US/sdk.js#version=v2.2&appId=12345&status=true&cookie=true&xfbml=true";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>
Run Code Online (Sandbox Code Playgroud)

当然,您可以省略参数以使用其默认值.

我无法在任何地方找到这种方法,因此使用它需要您自担风险.幸运的是,我正在升级旧网站v1.x,v2.x并在加载时使用了这种技术all.js.


saa*_*adk 5

我取代了这个

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

有了这个

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

并且工作:)