因此,我试图在用户单击“赞”按钮时进行一些事件处理。
我的Facebook按钮是通过以下方式异步创建的:
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
而且效果很好。
我也正在运行以下功能:
window.fbAsyncInit = function() {
FB.init({status: true, cookie: true, xfbml: true});
FB.Event.subscribe("xfbml.render", function() {
console.log('xfbml.render');
FB.Event.subscribe("edge.create", function(targetUrl) {
console.log('edge.create');
});
FB.Event.subscribe("edge.remove", function(targetUrl) {
console.log('edge.remove');
});
});
};
到目前为止,当我加载页面时,我在控制台中得到了“ xfbml.render”。然后我单击“赞”按钮,但我什么也没得到。
我希望它吐出控制台消息“ edge.create”。
有谁知道这可能导致什么?
之前,我已经将此页面放置在可公开访问的网站上(目前在我的开发平台上),但仍然无法正常工作。我可以再次要求。
最佳答案
为了在网页上使用XFBML,必须将XML名称空间属性添加到网页的根元素。如果没有此声明,则XFBML标记将不会在Internet Explorer中呈现。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="https://www.facebook.com/2008/fbml">
下一个,
您可以使用标准元素并调用(FB.init())来加载SDK。您还必须在文档中指定一个名为fb-root的元素。
<div id="fb-root"></div>
然后确保将您的应用程序ID添加到FB.init()函数中,
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
});
这是完整的工作代码:
<!doctype html>
<html lang="en" xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
<meta charset="utf-8">
<title>Facebook Like Button</title>
</head>
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({appId: 'YOUR_APP_ID', status: true, cookie: true,xfbml: true});
FB.Event.subscribe("edge.create", function(targetUrl) {
console.log('edge.create');
});
FB.Event.subscribe("edge.remove", function(targetUrl) {
console.log('edge.remove');
});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
<fb:like></fb:like>
</body>
</html>