FBConnect: Почему это отображается на некоторых страницах, а не на других? - PullRequest
10 голосов
/ 12 мая 2011

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

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

Но не на этом

http://www.thegreekmerchant.com/

Есть идеи, почему? Я использую Drupal 6 с модулем FBConnect.

Ответы [ 4 ]

10 голосов
/ 15 мая 2011

На самом деле проблема в том, что страницы используют разные сценарии для загрузки модуля 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>

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

7 голосов
/ 15 мая 2011

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

<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. Используйте Firebug или подобный инструмент, чтобы узнать это.

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

2 голосов
/ 16 мая 2011

Ваша ошибка в:

(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() никогда не вызывается ..

2 голосов
/ 15 мая 2011

у меня обе кнопки не работают в Chrome, в то время как в Firefox первая ссылка работает, а вторая нет ...

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

...