Facebook Javascript SDK问题:"FB未定义"

Ale*_*ler 39 javascript facebook google-chrome facebook-javascript-sdk

这里的Facebook文档中复制的以下代码在Chrome中对我不起作用.

<div id="fb-root"></div>
<script src="http://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
});
</script>
Run Code Online (Sandbox Code Playgroud)

在Javascript控制台中,我得到:

Uncaught ReferenceError: FB is not defined
Run Code Online (Sandbox Code Playgroud)

我在Firefox或Safari中没有任何问题,只有Chrome.

pbz*_*pbz 51

我看到Chrome已经安装了阻止Facebook脚本的WidgetBlock.结果恰好是此错误消息.确保禁用任何可能会干扰的扩展程序.

  • 啊,我正在使用"Facebook Disconnect" (7认同)
  • 仅供参考 - 这个镀铬扩展也引起了问题 - "Facebook Disconnect" - https://chrome.google.com/webstore/detail/ejpepffjfmamnambagiibghpglaidiec (6认同)
  • 断开是我的问题. (3认同)
  • 断开连接也是我的问题! (3认同)

Mat*_*tty 49

所以问题实际上是你没有等待init完成.这将导致随机结果.这是我使用的.

window.fbAsyncInit = function () {
    FB.init({ appId: 'your-app-id', cookie: true, xfbml: true, oauth: true });

    // *** here is my code ***
    if (typeof facebookInit == 'function') {
        facebookInit();
    }
};

(function(d){
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    d.getElementsByTagName('head')[0].appendChild(js);
}(document));
Run Code Online (Sandbox Code Playgroud)

这将确保一旦加载了所有内容,就可以使用并执行函数facebookInit.这样,每次要使用它时都不必复制init代码.

function facebookInit() {
   // do what you would like here
}
Run Code Online (Sandbox Code Playgroud)

  • 这次真是万分感谢.只是让我不必使用同步而不是异步.+1给你 (2认同)

小智 24

如果在fbAsyncInit定义之后省略分号,也会出现此错误.

window.fbAsyncInit = function() {
    FB.init({
        appId: 'YOUR APP ID',
        status: true,
        cookie: true,
        xfbml: true
    });
    //do stuff
}; //<-- semicolon required!
Run Code Online (Sandbox Code Playgroud)

如果没有分号,情况与此较短的示例相同:

var x = function () {
    console.log('This is never called. Or is it?');
}

('bar');
Run Code Online (Sandbox Code Playgroud)

该函数被调用,因为没有分号('bar')部分被视为对刚刚定义的函数的调用.

  • 非常感谢那个指针.为什么这么重要? (2认同)
  • 要命!那就是问题!但我也想知道它为何如此重要. (2认同)

Wop*_*ppi 5

我也遇到了这个问题,解决它的问题与Facebook无关,但我包含的先前脚本形式不好

<script type="text/javascript" src="js/my_script.js" />
Run Code Online (Sandbox Code Playgroud)

我改成了

<script type="text/javascript" src="js/my_script.js"></script>
Run Code Online (Sandbox Code Playgroud)

它有效......

Weew ...希望我的经验可以帮助其他人坚持这几乎几乎所有事情,但仍然无法让它工作......

哦,男孩...... ^^