这就是我的代码 - 这是包含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已成功触发..那么问题出在哪里?
感谢您的回答,对不起我糟糕的英语!
答案 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
}