Делаем js-код асинхронным только для настольной версии - PullRequest
0 голосов
/ 08 мая 2018

У меня есть внешний файл JS для блога блоггера. Можно ли заставить атрибут async работать только в том случае, если он загружен в версии для настольных компьютеров, и загружать только обычный сценарий без асинхронности, если это мобильная версия?

<script async="async" src='example.js' type='text/javascript'>

</script>

Обновление:

Я пытался использовать if cond .. и, похоже, он работает, но можно ли назвать его только один раз, чтобы ссылка на источник сценария не была записана дважды?

вот код

<b:if cond='data:blog.isMobileRequest == &quot;true&quot;'>
   <script src='example.js' type='text/javascript'></script>
<b:else/>
   <script async="async" src='example.js' type='text/javascript'></script>
</b:if>

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вы можете сделать это, используя тег b:attr, как показано ниже

<script src='example.js' type='text/javascript'>
    <b:attr name='async' value='async' cond='!data:blog.isMobileRequest'/>
</script>
0 голосов
/ 08 мая 2018

Как сказано в комментарии, это должно обрабатываться на стороне сервера, но если у вас не было другого выбора, кроме как реализовать его на стороне клиента, возможно:

<head>
  <script>
    const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(navigator.userAgent);
    const script = document.head.appendChild(document.createElement('script'))
    if (!isMobile) script.async = 'async';
    script.src = '/example.js';
  </script>
</head>

При этом, как правило, рекомендуется использовать async или defer независимо от того, чтобы избежать блокировки разбора документа во время выполнения скрипта.

...