Кнопка «Мне нравится» в Facebook не загружается - PullRequest
1 голос
/ 02 ноября 2011

Это мой первый вопрос , заданный , поэтому, если я опущу детали, будьте немного снисходительны. Спасибо!

Я использую плагин Facebook Like Button на своем сайте (пробовал как версию HTML5, так и версию xfbml). Я включил все необходимые теги и скрипты для поддержки xfbml и HTML5. Я следовал «спецификации» и провел тщательный поиск здесь и в других местах проблемы:

Кнопка «Мне нравится» работает правильно, за исключением того, что всплывающее окно / всплывающее окно, которое должно отображаться после нажатия кнопки, не загружается. Я имею в виду load , а не show (и да, я уже проверил наличие overflow:hidden проблем согласно spec ). Новый <span> (который включает <iframe>) добавляется в DOM сразу после кнопки <span>, и они загружают весь код, который должен быть там:

<span class=" fb_edge_comment_widget fb_iframe_widget " style="top: 19px; left: 0px; z-index: 10000;">
  <span>
    <iframe id="fa02aa64d8da" class="fb_ltr" scrolling="no" name="fee6eb9f6f2768" style="border: medium none; overflow: hidden; height: 225px; width: 401px;" src="http://www.facebook.com/plugins/comment_widget_shell.php?api_key=233493930007947&locale=en_US&master_frame_name=fa12240bc73214&sdk=joey">
      <html>
        <head>
        <body onload="onPageLoad()">
          <script>
            var onPageLoad = function() {
              document.domain = 'facebook.com';
              var loc = window.location.toString();
              var index = loc.indexOf('?');
              var qs = loc.substring(index + 1);
              var params = qs.split('&');
              var master_frame_name = '';
              for (var i in params) {
                var components = params[i].split('=');
                if (components[0] == 'master_frame_name') {
                  master_frame_name = components[1];
                  break;
                }
              }
              try {
                var master_frame = parent.frames[master_frame_name];
                master_frame.ExternalNodeConnectWidget.onCommentWidgetLoaded(document);
              } catch (e) {}
            };
          </script>
        </body>
      </html>
    </iframe>
  </span>
</span>

Теперь после загрузки <span> предполагается запустить функцию сценария onPageLoad, которая должна загрузить всех данных в <iframe>. Вместо этого я получаю кучу ошибок:

  1. Имеется печально известная Небезопасная попытка JavaScript для доступа к фрейму с URL
  2. Когда вы вручную запускаете функцию onPageLoad () (в надежде на загрузку содержимого в iframe) в консоли / Firebug, вы получаете

(в Chrome 15)

    Error: SECURITY_ERR: DOM Exception 18
      code: 18
      message: "SECURITY_ERR: DOM Exception 18"
      name: "SECURITY_ERR"
      __proto__: DOMException

(в Firefox 7)

    Error: Illegal document.domain value
    document.domain = 'facebook.com';

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

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Это известная ошибка в Facebook: http://developers.facebook.com/bugs/293075054049400

По сути, такое поведение можно получить, если на учетной записи пользователя Facebook включен безопасный просмотр.

0 голосов
/ 06 апреля 2012

Если у вас отключен безопасный просмотр (как по умолчанию), вот еще одно возможное решение: вы не можете использовать localhost в og: url, так как Facebook не может просматривать эту страницу для получения данных.Поэтому при разработке введите URL-адрес действующего сайта в формате og: url, og: image, URL-адрес кнопки «Нравится / поделиться» и т. Д. Даже если это может не помочь, необходимо щелкнуть по действующему сайту, когда я развернул его, он работал нормально.

Кто-нибудь знает, как это сделать, чтобы облегчить локальную разработку?

...