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 }
  • 相关阅读:
    linux命令行挂载NTFS文件系统的移动硬盘
    windows 修改鼠标滚轮自然滚动
    spark sql 的metastore 对接 postgresql
    ubuntu 14.04 源码编译postgresql
    spark sql 对接 HDFS
    部署spark 1.3.1 standalong模式
    perl 打开二进制文件,并拷贝内容
    ubuntu 14 安装XML::Simple 模块
    linux 搭建unixODBC ,并对接 PostgreSQL 9.3.4
    sed 删除指定行
  • 原文地址:https://www.cnblogs.com/wx3091/p/12144552.html
Copyright © 2011-2022 走看看