FB.Event.subscribe没有为某些事件触发

时间:2011-07-25 14:45:07

标签: facebook facebook-like facebook-javascript-sdk xfbml

所以当用户点击“赞”按钮时,我正在尝试进行一些事件处理。

我的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'。

有谁知道可能导致这种情况的原因?

我之前将这个页面放在一个可公开访问的网站上(它目前在我的开发平台上)&它仍然无法正常工作。如果要求,我可以再次。

2 个答案:

答案 0 :(得分:10)

要在网页上使用XFBML,必须将XML命名空间属性添加到页面的根元素。如果没有此声明,XFBML标记将无法在Internet Explorer中呈现。

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="https://www.facebook.com/2008/fbml">

接着, 您使用标准元素加载SDK并调用(FB.init())。您还必须在文档中指定名为 fb-root 的元素。

<div id="fb-root"></div>

然后确保在FB.init()函数中添加您的应用ID,

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>

答案 1 :(得分:4)

仅供将来参考:花了一些时间尝试制作iframe按钮触发事件 - 没有运气,但xfbml FB.Event.subscribe("edge.create", f);工作正常。