首页 > 解决方案 > 仅在桌面版本上使 js 代码异步

问题描述

我有一个博客博客的外部 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>

标签: javascriptif-statementasynchronousblogger

解决方案


正如评论所说,这应该在服务器端处理,但如果你别无选择,只能在客户端实现它,它是可能的:

<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>

也就是说,使用asyncor不defer考虑通常是一个好主意,以避免在脚本执行时阻塞文档解析。


推荐阅读