FBConnect: Почему он отображается на некоторых страницах, а не на других?

В правом верхнем углу он отображается на этой странице:

http://www.thegreekmerchant.com/product/fokofpolisiekar/band-logo

Но не на этом

http://www.thegreekmerchant.com/

Любая идея, почему? Я использую Drupal 6 с модулем FBConnect.

Ответ 1

На самом деле проблема заключается в том, что страницы используют разные сценарии для загрузки модуля FBConnect.

Вкл http://www.thegreekmerchant.com/:

<div id="fb-root"></div>
  <script type="text/javascript">
    window.fbAsyncInit = function() {
      FB.init({
        appId  : '146943825373452',
        status : true, // check login status
        cookie : true, // enable cookies to allow the server to access the session
        xfbml  : true,
        logging: '0'
      });

      jQuery(document).trigger('fb:init');
    };

    (function() {
      var e = document.createElement('script');
      e.src = document.location.protocol + '//connect.facebook.net//all.js';
      e.async = true;
      document.getElementById('fb-root').appendChild(e);
    }());
  </script>

В http://www.thegreekmerchant.com/product/fokofpolisiekar/band-logo есть два сценария: предыдущий и следующий:

<div id="fb-root"></div><script type="text/javascript">
 window.fbAsyncInit = function() {
   FB.init({
     appId: "146943825373452",
     status: true, 
     cookie: true,
     xfbml: true
   });

   FB.Event.subscribe("edge.create", function(href, widget) {
      _gaq.push(["_trackEvent", "Facebook like", "Drupal", href]);
   });


 };
 (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>

Я заменил первый script на второй, а http://www.thegreekmerchant.com/ теперь работает (конечно, не острая версия, а на моем сервере песочницы). Вам понадобится только второй script на http://www.thegreekmerchant.com/product/fokofpolisiekar/band-logo.

Ответ 2

На рабочей странице у вас есть эта разметка:

<div id="fbconnect_button-wrapper" class="form-item">
  <fb:login-button v="2" background="dark" onlogin="facebook_onlogin_ready();" size="small">
    <a class="fb_button fb_button_small">
      <span class="fb_button_text">Facebook Connect</span>
    </a>
  </fb:login-button>
  <div class="description">Sign in using Facebook</div>
</div>

В то время как для нерабочего у вас есть это:

<div id="fbconnect_button-wrapper" class="form-item">
  <fb:login-button v="2" background="dark" onlogin="facebook_onlogin_ready();" size="small">
    Facebook Connect
  </fb:login-button>
  <div class="description">Sign in using Facebook</div>
</div>

Я предполагаю, что JavaScript, создающий разметку, не работает должным образом. Возможно, у вас есть другая ошибка JavaScript перед выполнением кнопки FB script. Используйте Firebug или аналогичный инструмент, чтобы найти это.

Без дополнительной информации вам нелегко помочь.

Ответ 3

кнопки оба не работают для меня в хроме, а на firefox первая ссылка работает, а вторая не...

Дело в том, что домашняя страница в firefox отправляет загрузку процессора на 100%, и я вижу, что у вас есть множество javascripts на дому. Я бы попытался отключить другие javascripts и, в конечном счете, запустить проверку на источнике страницы, чтобы узнать, есть ли какие-либо сломанные материалы.

Ответ 4

Вы ошибаетесь:

(function() {
      var e = document.createElement('script');
      e.src = document.location.protocol + '//connect.facebook.net//all.js';
      e.async = true;
      document.getElementById('fb-root').appendChild(e);
    }());

Строка:

e.src = document.location.protocol + '//connect.facebook.net//all.js';

должен быть чем-то вроде

e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';

Если вы просмотрите файл all.js, который будет загружен вашим браузером, вы увидите сообщение об ошибке.

Таким образом, скрипты FB не загружаются, и поэтому внутренняя часть вашего window.fbAsyncInit = function() никогда не вызывается..