• audio的自动播放报错解决


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

    查找资料后,发现是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=" 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 }
  • 相关阅读:
    写给大家看的设计书(第3版)
    C#总结2012
    python 网络编程学习 1
    深入 聚集索引与非聚集索引(一)
    深研TCP/IP详解卷1开篇
    在实际项目中如何应用门面模式(Facade)
    MVC系列_权限管理之权限控制
    gae上部署了一个定时往手机发送天气预报的小python程序
    ASP.NET开发工具整理第二季
    python 实现文件的递归拷贝
  • 原文地址:https://www.cnblogs.com/wx3091/p/12144552.html
Copyright © 2020-2023  润新知