如何解决'FB未定义'?

时间:2011-03-16 20:08:52

标签: javascript facebook

有时我在加载http://connect.facebook.net/en_US/all.js

时遇到“FB未定义”问题

我意识到问题是因为有时我的网站只是没有加载该文件。所以它什么都没有,而FB对象确实不存在。

我的解决方案是在发生这种情况时阻止我的用户,所以我在JavaScript中尝试了以下代码,但似乎没有用:

if (FB) {/*run the app*/} else {/*alert the user*/}
if (FB!==false) {/*run the app*/} else {/*alert the user*/}
if (FB!='undefined') {/*run the app*/} else {/*alert the user*/}

感谢您的回答!

12 个答案:

答案 0 :(得分:77)

我认为你应该解决主要问题,哪个解决方案是由Facebook提供的(异步加载SDK ):

  

您应该在要加载它的每个页面上的开始标记之后直接插入它:

<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'your-app-id',
      xfbml      : true,
      version    : 'v2.1'
    });
  };

  (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";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));
</script>

来自documentation

  

Facebook SDK for JavaScript没有任何独立文件   需要下载或安装,而只需要包含   HTML中的一小段常规JavaScript   将SDK异步加载到您的页面中。 异步加载意味着   它不会阻止加载页面的其他元素。

更新: 使用文档中的最新代码。

答案 1 :(得分:16)

假设FB是包含Facebook对象的变量,我会尝试这样的事情:

if (typeof(FB) != 'undefined'
     && FB != null ) {
    // run the app
} else {
    // alert the user
}

为了测试普通旧JavaScript中未定义的内容,您应该使用“typeof”运算符。您显示的示例只是将它与字符串'undefined'进行比较,将评估为false,除非您的FB对象确实包含字符串'undefined'!

另外,您可能希望使用Firebug(在Firefox中)等各种工具来查看您是否可以解决为什么没有加载Facebook文件。

答案 2 :(得分:11)

我猜你错过了将分号;放在}的结束大括号window.fbAsyncInit = function() { ... };

答案 3 :(得分:9)

对于仍然遇到这个FB错误的人,我使用这个厚脸皮修复这个问题。

我使用 HTTPS 而不是http://connect.facebook.net/en_US/all.js,而是将其更改为https://connect.facebook.net/en_US/all.js 它解决了我的问题。

答案 4 :(得分:4)

有解决方案:)

您必须在加载窗口后运行脚本

如果你使用jQuery,你可以使用简单的方法:

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId      : 'your-app-id',
            xfbml      : true,
            status     : true,
            version    : 'v2.5'
        });
    };

    (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";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>

<script>
$(window).load(function() {
    var comment_callback = function(response) {
        console.log("comment_callback");
        console.log(response);
    }
    FB.Event.subscribe('comment.create', comment_callback);
    FB.Event.subscribe('comment.remove', comment_callback);
});
</script>

答案 5 :(得分:2)

您与原始示例非常接近。您可以使用@ jAndy的建议或:

if (typeof FB != 'undefined')

答案 6 :(得分:1)

如果您的脚本标记正确,那么FB不能加载到您的javascript中是很奇怪的。检查您的浏览器中是否安装了任何中和FB Connect代码的javascript阻止程序,广告拦截器,跟踪拦截器等。

答案 7 :(得分:1)

我从未定义过FB。原来我将原型函数原型化为Object类,称为“merge”,另一个称为“toArray”。 这两个搞砸了Facebook,没有错误消息,但它不会加载。

我更改了原型的名称,现在可以使用了。嘿,如果Facebook要打造原型Object,我不应该被允许原型化吗?

答案 8 :(得分:1)

FB建议在正文后添加async all.js include,以便在页面中使用FB对象时做好准备。

您还可以使用setTimeout进行人工延迟以确保加载FB对象。 e.g。

<script>setTimeout(function(){
FB.Event.subscribe('edge.create',
function (response) {
    alert('msg via fb');
});},2000);
</script>

答案 9 :(得分:0)

<script>  
    window.fbAsyncInit = function() {    
        FB.init({      
            appId      :'your-app-id',      
            xfbml      :true,      
            version    :'v2.1'
        });
    };
    (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";     
        fjs.parentNode.insertBefore(js, fjs);
    }
    (document,'script','facebook-jssdk'));
</script> 

来自文档:Facebook SDK for JavaScript没有任何需要下载或安装的独立文件,而只需要在HTML中包含一小段常规JavaScript

答案 10 :(得分:0)

我有一个类似的问题,结果是Adblocker Pro。请务必检查是否已禁用此阻止扩展程序或其他阻止扩展程序。因此,我失去了大约1小时30分钟。感觉像这样的菜鸟;)

答案 11 :(得分:-1)

...
</head>
<body>
    <!-- Load Facebook SDK for JavaScript -->
    <div id="fb-root"></div>
<script type="text/javascript">
...

检查div id =“fb-root”/ div“!!!运行非常重要。