zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    PC版优酷的一次异常
    颜宁开讲啦谈理性思考
    李彦宏开讲啦谈判断能力
    尝试插入cctv视频
    selenium中quit与close方法的区别
    CodeForces 131C The World is a Theatre(组合数)
    CodeForces 446A DZY Loves Sequences(dp)
    UVA 1631 Locker(密码锁)(dp记忆化搜索)
    UVA 1630 Folding(串折叠)(dp记忆化搜索)
    UVA 1629 Cake slicing(切蛋糕)(dp记忆化搜索)
  • 原文地址:https://www.cnblogs.com/wx3091/p/12144552.html
Copyright © 2011-2022 走看看