FB.Event.subscribe не стреляет для определенных событий - PullRequest
4 голосов
/ 25 июля 2011

Поэтому я пытаюсь выполнить некоторую обработку событий, когда пользователь нажимает кнопку «Нравится».

Моя кнопка 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 ]

10 голосов
/ 25 июля 2011

Чтобы использовать 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 (),

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>
4 голосов
/ 08 декабря 2011

Только для справки: потратил некоторое время, пытаясь вызвать события запуска кнопки iframe - не повезло, но с xfbml FB.Event.subscribe("edge.create", f); отлично работает.

...