HTML5 - 方式:FB未定义

时间:2011-10-27 12:48:20

标签: facebook facebook-javascript-sdk

这就是我的代码 - 这是包含JS-FB-Api的新HTML5方式:

    <div id="fb-root"></div>
    <script>
    (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/de_DE/all.js#xfbml=1&appId=XXXXXXXXXXXXXXXXX";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
    </script>

这对于Like-Buttons和其他东西来说很有效。但如果我想使用FB.Event.subscribe ..:

    window.fbAsyncInit = function() {
        FB.Event.subscribe('edge.create', function(response) {
            $('#head h1 a').text('liked');
        });
        $('#head h1 a').text('loaded');
    }

...... Firebug告诉我FB没有定义。但是window.fbAsyncInit已成功触发..那么问题出在哪里?

感谢您的回答,对不起我糟糕的英语!

2 个答案:

答案 0 :(得分:1)

我有同样的问题,我可以在Firefox中使用它,虽然FireBug指出有一些错误。 我不能在Chrome上使用它,它的控制台说FB没有定义。 然后我尝试了这样,它的工作原理:

window.fbAsyncInit = function() {
/* FB Likes */
FB.Event.subscribe("edge.create",function(response){
    $.ajax({
        /* bla bla */
    });
});
FB.Event.subscribe("edge.remove",function(response){
    $.ajax({
        /* bla bla */
    });
});
};
(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/bs_BA/all.js#xfbml=1&appId=MY-APP-ID";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

这样可行,没有像FB.init那样的错误已经调用过或类似的东西:)

答案 1 :(得分:0)

我在一个也使用jQuery的网站上使用基于HTML5的Facebook集成。

我的代码与您的代码略有不同,可能差异很重要:

if ($("#fb-root").length>0) {  
  // no window.fbAsyncInit w/o <div id="fb-root" /> being present in DOM

  // call FB.init() first
  FB.init(...); // you should pass the arguments you need for this

  // call other stuff after FB.init()
  FB.event.subscribe(...); // you should pass the arguments you need for this
}