audio在ios不能自动播放解决方案

2,950 阅读1分钟

众所周知,audio在ios上不能自动播放是一个普遍性问题,当我们想实现自动播放时,直接调用oncanplay是没有效果的(PC端和Android设备会正常播放),在此给出以下解决方法:

通过手动的形式触发(不推荐)

当我们的播放页面是从其他页面进来的话,可以在上一个页面的点击事件里手动触发播放,或者在进入该页面以后给一个弹出框,通过手动点击去触发播放。

项目运行于微信上时借助WeixinJSBridgeReady实现(微信上使用)
  • 首先加载微信JS-SDK
<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
wx.config({
  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: '', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [] // 必填,需要使用的JS接口列表
});
  • 最后监听WeixinJSBridgeReady时调用paly()播放方法
wx.ready(function() {
    let audio = this.$refs.audio;
    audio.play();
    document.addEventListener("WeixinJSBridgeReady", function() {
            audio.play();
        },
        false
    );
});
通过ondurationchange事件来监听(推荐)

ondurationchange:事件在视频/音频(audio/video)的时长发生变化时触发。在该事件触发以后,调用paly()播放。详情以及其他事件对象查看传送门

watch: {
    // currentSong 指当前播放的歌曲
    currentSong () {
      this.$refs.audio.ondurationchange = () => {
        this.totalTime = this.$refs.audio.duration
        if (this.isPlaying) {
          this.$refs.audio.play()
        } else {
          this.$refs.audio.pause()
        }
      }
    },
}

若有其他方法,欢迎交流