Как позвонить на страницу php из Facebook кнопки «Нравится» JS-кодом? - PullRequest
0 голосов
/ 22 декабря 2011

Я просмотрел некоторые ответы, и я не могу заставить что-либо работать. Теперь мне интересно, так ли это, потому что сайт, над которым я работаю, в настоящее время виден только локально через XAMPP.

Вот несколько фрагментов кода из того, что я пробовал:

<script> 
  FB.Event.subscribe('edge.create', location.href = 'test.php');
</script>

и

FB.Event.subscribe('edge.create', function(response) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", "test.php", true);
    xmlhttp.send(); 
});

Кажется, что код facebook работает, но моя php-страница никогда не вызывается. Даже простое предупреждение («Вам понравился URL:»); не работает Я могу «лайкнуть» страницу, и она появляется в моей стене FB как таковая.

Это то, что у меня есть сразу после тега body (copy-paste из FB):

<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/en_US/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

Я видел сообщение, где утверждается, что если понравившийся URL не совпадает с URL, по которому была нажата кнопка, это не сработает. Ну, я нажимаю "www.site-name.local", когда реальный URL-адрес - .com. Кажется, это работает, пока любимый URL-адрес отображается на моей стене FB, но даже не срабатывает.

Я только что проверил консоль Firebug и получил:

FB is not defined
    FB.Event.subscribe('edge.create', 

Буду признателен за толчок в правильном направлении.

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

ОК, вот решение.Возможно, это НЕ РЕШЕНИЕ, но оно сработало для меня.

Код и объяснение, размещенные на сайте FB Dev здесь:

http://developers.facebook.com/docs/guides/web/

<html>
  <head>
    <title>My Great Web page</title>
    </head>
    <body>
      <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/en_US/all.js#xfbml=1";
       fjs.parentNode.insertBefore(js, fjs);
      }(document, 'script', 'facebook-jssdk'));
    </script>
    <div class="fb-like"></div>
    </body>
 </html>

Работалхорошо, что позже я смог "лайкнуть" страницу и показать это на FB, но он не вызывал никаких действий после нажатия кнопки.

Я решил пойти и получить идентификатор приложения.для сайта.Это заставило все это работать.

Новый код выглядит следующим образом:

<script>
window.fbAsyncInit = function() {
  FB.init({
    appId      : 'my_app_ID_number', // App ID
    status     : true, 
    cookie     : true,
    xfbml      : true,
    oauth      : true,
  });
  // Additional initialization code here

  // Get notified when user likes this
  FB.Event.subscribe('edge.create', function(response){location.href = 'test.php'});            
};

// Load the SDK Asynchronously
(function(d){
   var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
   js = d.createElement('script'); js.id = id; js.async = true;
   js.src = "//connect.facebook.net/en_US/all.js";
   d.getElementsByTagName('head')[0].appendChild(js);
 }(document));

Я должен был поместить "FB.Event.subscribe" в этот блок кода, иначе это вызовет ошибку.«FB.Event.subscribe», казалось, работал до того, как «FB.init» получил шанс выполнить свою работу.Не уверен, как бы вы поступили, если бы у вас было несколько кнопок «Мне нравится» на одной странице.

В любом случае, это сработало для меня.

1 голос
/ 23 декабря 2011

Убедитесь, что FB.init вызван до того, как FB.Event.subscribe может сработать.

...