Javascript: мой метод fbAsyncInit () никогда не вызывается - PullRequest
9 голосов
/ 08 февраля 2012

Я копирую код прямо с этой страницы на веб-сайте разработчика Facebook, и метод fbAsyncInit () никогда не срабатывает. Я также прочитал эту страницу , я изменил код несколькими различными способами и не могу запустить метод. Твои мысли?

Кроме того, когда я пытаюсь запустить этот код и Chrome (на Mac) и запустить Firebug lite, я получаю сообщение об ошибке «Firebug Lite не может быть загружен на этой странице»

Вот код ...

<html>
<head>
</head>
<body>
<div id="fb-root"></div>
<script type="text/javascript">
  window.fbAsyncInit = function() {
    FB.init({
      appId      : '1234567890', // App ID
      channelUrl : '//localhost/test.html', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });

    alert("this statement never gets called either");
  };

  // 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));
</script>
</script>
</body>
</html>

Ответы [ 6 ]

7 голосов
/ 21 ноября 2012

У меня была такая же проблема.Казалось, я загрузил библиотеку JavaScript //connect.facebook.net/en_US/all.js в каком-то другом месте перед асинхронной загрузкой.

Это, вероятно, немного смутило.

Я удалил определение тега преждевременной загрузки, и теперь я в порядке.

5 голосов
/ 08 ноября 2012

Вы должны изменить:

 js.src = "//connect.facebook.net/en_US/all.js";

на:

 js.src = "http://connect.facebook.net/en_US/all.js";
5 голосов
/ 08 февраля 2012

Есть ли у вас проблемы с синхронной загрузкой?

    <script src="//connect.facebook.net/en_US/all.js"></script>
<script>
  FB.init({
    appId      : 'YOUR_APP_ID',
    channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
    status     : true, // check login status
    cookie     : true, // enable cookies to allow the server to access the session
    xfbml      : true  // parse XFBML
  });
</script>
1 голос
/ 03 июля 2012

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

0 голосов
/ 28 января 2018

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

  <script>
  window.fbAsyncInit = function() {
    FB.init({
      appId            : 'your-app-id',
      autoLogAppEvents : true,
      xfbml            : true,
      version          : 'v2.11'
    });
  };

  (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 = "https://connect.facebook.net/en_US/sdk.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));
</script>
0 голосов
/ 08 февраля 2012

Поскольку ваш файл называется test.html, а channelUrl должен быть test.html, вы создаете циклическую ссылку . Для правильного channelUrl он должен содержать только одну строку

<script src="//connect.facebook.net/en_US/all.js"></script>

http://developers.facebook.com/docs/reference/javascript/

Файл канала решает некоторые проблемы с междоменной связью в определенных браузерах. Содержимое файла channel.html может быть просто одна строка:

<script src="//connect.facebook.net/en_US/all.js"></script>

Важно, чтобы файл канала кэшировался до тех пор, пока возможный. При обслуживании этого файла вы должны отправить действительные заголовки Expires с длительным сроком годности. Это гарантирует, что файл канала кэшируется браузером, что важно для беспроблемного взаимодействия с пользователем. Без надлежащего кэширования междоменная связь станет очень медленный и пользователи будут страдать от сильно ухудшенного опыта. Просто способ сделать это в PHP это:

 <?php  $cache_expire = 60*60*24*365;  header("Pragma: public");  header("Cache-Control: max-age=".$cache_expire);  header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');  ?>  <script src="//connect.facebook.net/en_US/all.js"></script>

Параметр channelUrl является необязательным, но рекомендуется. Предоставление Файл канала может помочь решить три конкретные известные проблемы. Первый, страницы, содержащие код для связи между кадрами, могут стать причиной Плагины отображаются как пустые без channelUrl. Во-вторых, если нет channelUrl предоставляется, и страница включает в себя автоматическое воспроизведение аудио или видео, пользователь может услышать два потока аудио, потому что страница имеет был загружен второй раз в фоновом режиме для кросс-домена коммуникации. В-третьих, файл канала предотвратит включение дополнительных хиты в ваших журналах на стороне сервера. Если вы не укажете channelUrl, вы можно удалить просмотры страниц, содержащие fb_xd_bust или fb_xd_fragment параметры из ваших журналов, чтобы обеспечить правильный счет.

channelUrl должен быть полным URL-адресом, соответствующим странице на который вы включаете в SDK. Другими словами, файл канала домена должен включать www, если ваш сайт обслуживается с использованием www, и если вы измените document.domain на вашей странице вы должны сделать такой же document.domain изменить в файле channel.html. Протоколы также должны матч. Если ваша страница обслуживается через https, ваш channelUrl также должен быть HTTPS. Не забудьте использовать соответствующий протокол для скрипта src как Что ж. Пример кода выше использует относящиеся к протоколу URL, которые должны правильно обрабатывать большинство случаев https.

...