Динамическая (AJAX) загрузка контента, исчезает кнопка «Поделиться» в Facebook - PullRequest
0 голосов
/ 25 февраля 2019

так в тексте (статье) у меня так:

<div id="fb-root"></div>
<script>
    (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 = "//connect.facebook.net/hu_HU/sdk.js#xfbml=1&version=v2.5";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>

<div class="facebook_share_wrapper">
    <div class="fb-share-button"
         data-href="http://www...."
         data-layout="button">
    </div>
</div>

в первый раз хорошо загружается!Но во второй раз, когда закончился ajax:

setTimeout(function() {
    console.log(FB.XFBML.parse());
}, 3000);

, как вы можете видеть, я дал дополнительное время.Но кнопка «Поделиться» в Facebook не появится!Многие подобные проблемы были решены с FB.XFBML.parse, но не с моим ...

1 Ответ

0 голосов
/ 25 февраля 2019

Я предполагаю, что вы также пытаетесь загрузить JS SDK динамически, но JS не будет вызываться, если вы просто добавите его в DOM (например, с помощью innerHTML).Кроме того, вы не инициализируете какое-либо приложение.

Решение:

  • Загрузка JS SDK при загрузке страницы - только один раз
  • Инициализация приложения с помощью FB.init
  • Используйте FB.XFBML.parse() в обратном вызове вашего вызова AJAX, сразу после добавления кнопки «Поделиться» в DOM

Дополнительная информация и пример того, какдля загрузки JS SDK: https://developers.facebook.com/docs/javascript/quickstart

Внимание! Не работайте с setTimeout, это очень плохой обходной путь.

...