Проблемы с асинхронной загрузкой ya.share

Тема в разделе "JavaScript", создана пользователем pragmatik, 23 дек 2013.

Модераторы: ZiX
  1. pragmatik

    pragmatik Постоялец

    Регистр.:
    12 фев 2013
    Сообщения:
    125
    Симпатии:
    31
    В хидере страницы указываю
    Код:
    <script async src="//yandex.st/share/share.js" type="text/javascript"></script>
    обычные конструкции без дополнительных скриптов, например, <span class="yashare-auto-init" data-yashareQuickServices="vkontakte,facebook,twitter,moimir,gplus,odnoklassniki" data-yashareTheme="counter" data-yashareType="big"></span>, при этом прекрасно загружаются,
    и только в одном месте использую конструкцию с дополнительным скриптом типа:
    Код:
    <script type="text/javascript">
    new Ya.share({
    'element': 'sharelink',
    'elementStyle': {
    'text': 'Добавить в закладки',
    'type': 'button',
    'linkIcon': false,
    'border': false,
    'quickServices': ['']
    },
    'popupStyle': {
    'blocks': { 'Закладки': ['yazakladki']}
    }
    });
    </script>
    <span id="sharelink"></span>
    при наличии атрибута async у скрипта в хидере элемент <span id="sharelink"></span>, не отображается, я так понимаю из-за того, что код скрипта от которого он зависит при асинхронной загрузке скрипта из хидера выполняется раньше, чем загружается скрипт ya.share.
    Подскажите, пожалуйста, как в данном случае и асинхронную загрузку сохранить и элемент отобразить. С js у меня не очень, поэтом приветствуются иллюстрированные листингами советы.
     
  2. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    Похоже вам требуется что-то вроде
    Код:
    window.onload = function(e){
       new Ya.share({
          'element': 'sharelink',
          'elementStyle': {
             'text': 'Добавить в закладки',
             'type': 'button',
             'linkIcon': false,
             'border': false,
             'quickServices': ['']
          },
          'popupStyle': {
             'blocks': { 'Закладки': ['yazakladki']}
          }
       });
    }
    Тогда ваш код выполнится после загрузки всех элементов, требуемых для отображения страницы
     
    pragmatik нравится это.
  3. pragmatik

    pragmatik Постоялец

    Регистр.:
    12 фев 2013
    Сообщения:
    125
    Симпатии:
    31
    благодарю! оборачивание в функцию
    window.onload = function(e){} действительно решило проблему!