audio的自动播放报错解决

简介: 使用audio标签时,当前页面没有进行交互时,比如用户刷新了页面后,play()调用就会报错,要如何解决?

使用audio标签时,当前页面没有进行交互时,比如用户刷新了页面后,play()调用就会报错,如下图:

audio的自动播放报错-1.jpg

查找资料后,发现是2018年4月以后,chrome浏览器对这块进行了优化,为了节约流量,禁止了自动播放,必须由用户交互后才能触发。

当用户点击网页后,点击任何位置都行,andio就能自动播报了,然后我就想了个方案,设置个按钮,让按钮自动点击,然后触发audio,然而发现这种作弊方案,仍旧不行 后来各种找方法,标签加muted属性仍于事无补,到最后也只有没有办法的办法。

由于play()方法是一个promise,监听它的成功和失败状态,如果失败,那就提醒用户进行交互,设置一个激活按钮,点击后就能触发了。

1 <template>
 2     <el-button class="autoPlay" type="text" v-if="isShow" @click="autoPlay">激活</el-button>
 3     <!-- audio宽度设0,让其隐藏 -->
 4     <audio muted controls ref="audio" :src="audioSrc" style="width: 0px;"></audio>
 5 </template>
 6 import newOrder from '@/assets/audio/new_order.mp3'
 7 
 8 export default {
 9   data () {
10     return {
11       audioSrc: newOrder,
12       isShow: false
13     }
14   },
15   created() {
16     this.open()
17   },
18   methods: {
19     open() {
20       const myAudio =  document.getElementsByTagName('audio')[0]
21       if (myAudio.canPlayType) {
22         this.autoPlay()
23       } else {
24         this.$message({
25           type: 'error',
26           message: '您的浏览器不支持语音播报'
27         })
28       }
29     },
30     // 自动播放
31     autoPlay() {
32       this.$refs.audio.play().then(() => {
33         this.isShow = false
34       }).catch(() => {
35         this.$message({
36           type: 'error',
37           message: '语音播报失效,点击右上角"激活"按钮'
38         })
39         this.isShow = true
40       })
41     }
42   }
43 }
相关文章
|
JSON 前端开发 数据格式
【前后端异常】http/https post请求 返回415错误状态码的解决方法
【前后端异常】http/https post请求 返回415错误状态码的解决方法
9043 0
|
6月前
|
数据采集 人工智能 IDE
告别碎片化日志:一套方案采集所有主流 AI 编程工具
本文介绍了一套基于MCP架构的轻量化、多AI工具代码采集方案,支持CLI、IDE等多类工具,实现用户无感、可扩展的数据采集,已对接Aone日志平台,助力AI代码采纳率分析与研发效能提升。
1031 46
告别碎片化日志:一套方案采集所有主流 AI 编程工具
|
人工智能 安全 API
最近谈论 SSE 和 WebSocket 的人越来越多的原因
实时通信已经成了大模型应用的标配。
2705 265
最近谈论 SSE 和 WebSocket 的人越来越多的原因
|
7月前
|
存储 缓存 供应链
对比淘宝、京东、拼多多API,开启电商多元化运营模式!
在电商多平台运营中,淘宝、京东、拼多多API各具特色:淘宝重生态与营销,京东强在物流与稳定,拼多多胜在敏捷与流量。本文对比三大平台API差异,探讨通过数据标准化、系统集成与自动化策略实现高效整合,助力商家打破数据孤岛,提升运营效率,构建智能化、可扩展的多元化电商体系。(238字)
|
12月前
|
前端开发
文字显示在div 最下面,css怎么写
文字显示在div 最下面,css怎么写
729 0
|
移动开发 JavaScript 前端开发
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
这篇文章介绍了在UniApp H5项目中处理跨域问题的两种方法:通过修改manifest.json文件配置h5设置,或在项目根目录创建vue.config.js文件进行代理配置,并提供了具体的配置代码示例。
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
|
前端开发
边框也疯狂:CSS创造令人瞩目的流光闪烁效果!
边框也疯狂:CSS创造令人瞩目的流光闪烁效果!
uniapp 添加自定义图标
uniapp 添加自定义图标
1384 0