Событие не запускается после нажатия кнопки Facebook like?

#javascript #facebook #dom-events

#javascript #Facebook #dom-события

Вопрос:

Я пытаюсь запустить это событие FB Subscribe (alert('hi')) но, похоже, оно не работает:

 <!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: 'myappid', status: true, cookie: true, xfbml: true });
        targetUrl="http://www.goal.com";
        FB.Event.subscribe("xfbml.render", function () {
            console.log('xfbml.render');
            FB.Event.subscribe("edge.create", function (targetUrl) {
                console.log('edge.create');
                alert('hi');    
            });
            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. я бы попытался использовать событие edge.create ВНЕ функции обратного вызова события xfbml.render :_)

Ответ №1:

Я заметил, что событие edge.create не запускается на localhost. После загрузки на тестовый сервер, который виден Facebook, это сработало.

Также, как предложил Руфинус, подпишитесь на эти события за пределами функции обратного вызова xfbml.render.

 <script>
window.fbAsyncInit = function () {
    FB.init({ appId: 'myappid', status: true, cookie: true, xfbml: true });
    targetUrl="http://www.goal.com";
    FB.Event.subscribe("xfbml.render", function () {
        console.log('xfbml.render');
    });
    FB.Event.subscribe("edge.create", function (targetUrl) {
        console.log('edge.create');
        alert('hi');    
    });
    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>