Кнопка «Нравится» на Facebook иногда появляется, иногда нет - PullRequest
3 голосов
/ 22 июля 2010

У меня странная проблема с кнопками лайков на моем сайте. Когда я захожу на страницу, она отображается правильно, после обновления она не появляется, и у меня ошибка javascript

FB.provide is not a function
[Break on this error] FB.provide('Array',{indexOf:function(a...|c.hasOwnProperty(d))a(c[d],d,c);}});

Инициализация и асинхронное включение js выглядит следующим образом

<body>
            <div id="fb-root"></div>
            <script type="text/javascript">
              window.fbAsyncInit = function() {
                FB.init({appId: 'fffffffffffffffffffffffffffffff', status: true, cookie: true, xfbml: true});
              };
              (function() {
                var e = document.createElement('script');
                e.type = 'text/javascript';
                e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
                e.async = true;
                document.getElementById('fb-root').appendChild(e);
              }());
            </script>

И вот код ввода кнопок лайков и лайков:

<fb:like href="<%= link -%>" layout="button_count" font="arial"></fb:like>

<a title="Share" name="fb_share" type="button_count" share_url="<%= link -%>" href="http://www.facebook.com/sharer.php">Share</a><script src="http://static.ak.fbcdn.net/connect.php/js/FB.Share" type="text/javascript"></script>

Есть идеи?

Ответы [ 3 ]

6 голосов
/ 10 октября 2010

Я обнаружил, что порядок также имеет значение, поэтому при динамической загрузке файлов all.js должен быть загружен до FB.share js

<script type="text/javascript">
              window.fbAsyncInit = function() {
                FB.init({appId: 'xxxxxxxxxxxxxxxxxxxxxxx', status: true, cookie: true, xfbml: true});
              };
              (function() {
                var e = document.createElement('script');
                e.type = 'text/javascript';
                e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
                e.async = true;
                document.getElementById('fb-root').appendChild(e);
              }());

              $(document).ready(function(){
                var s = document.createElement('script');
                s.type = 'text/javascript';
                s.src = 'http://static.ak.fbcdn.net/connect.php/js/FB.Share';
                s.async = true;
                document.getElementById('fb-root').appendChild(s);
              });

            </script>
0 голосов
/ 13 октября 2017

После того, как вы закончили с размещением HTML в DOM, просто позвоните window.fbAsyncInit();.

0 голосов
/ 08 октября 2010

Я думаю, что нашел решение.

Когда я загружал файл all.js, как вы, у меня тоже была проблема, но когда я скачал all.js вручную и скопировал его где-то на сайте. После этого загрузка через тег script позволила устранить эту проблему.

...