javascript - 仅在桌面版本上使 js 代码异步
问题描述
我有一个博客博客的外部 JS 文件,是否可以仅在桌面版本上加载 async 属性时才可以使用它,并且如果它是移动版本,则只加载没有异步的普通脚本?
<script async="async" src='example.js' type='text/javascript'>
</script>
更新 :
我尝试使用 if cond .. 它似乎可以工作,但我可以只调用一次而不将脚本源链接写两次吗?
这是代码
<b:if cond='data:blog.isMobileRequest == "true"'>
<script src='example.js' type='text/javascript'></script>
<b:else/>
<script async="async" src='example.js' type='text/javascript'></script>
</b:if>
解决方案
正如评论所说,这应该在服务器端处理,但如果你别无选择,只能在客户端实现它,它是可能的:
<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
or不defer
考虑通常是一个好主意,以避免在脚本执行时阻塞文档解析。
推荐阅读
- javascript - 无法在函数内部设置值
- terraform - 领事服务无法启动
- flutter - 没有定义颜色的问题
- python - 在 python 中制作了一个模具模拟器来改进它?
- angular - Angular 在继续计算之前等待模板更新?
- android - 如何添加根据屏幕保持平台响应的填充?
- dart - (Moor Flutter) 单个实体中的多个关系
- spring-boot - 如何在 KafkaListenerContainerFactory 创建的 KafkaListener 类中添加 Micrometer Timer?
- php - 基于 WooCommerce 中付款方式 ID 的其他电子邮件收件人
- reactjs - 如何在 Gatsby JS 中渲染 PDF?