记录在开发微信公众号 h5 时,遇到 ios 设备无法自动播放音乐问题
标签部分
1 2 3 4 5 6 7 8
| <audio id="bgmusic" autoplay controls preload src="/static/music.mp3" style="display: none;" />
|
问题原因
- 可以自动播放时正确的事件顺序是:
loadstart -> loadedmetadata -> loadeddata -> canplay -> play -> playing
不能自动播放时触发的事件是
执行播放时需要注意
- iOS 9 还需要额外的
load
一下, 否则直接 play
无效
- iOS 7/8 仅需要
play
一下
注意点
- 由于 iOS Safari 限制不允许 audio autoplay, 必须用户主动交互(例如 click)后才能播放 audio, 因此我们通过一个用户交互事件来主动
play
一下 audio.
解决方案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| this.audioEl = null
forceSafariPlayAudio() { this.audioEl.load(); this.audioEl.play(); }
let that = this; this.$nextTick(()=>{ this.audioEl = document.getElementById('bgmusic'); document.addEventListener('WeixinJSBridgeReady', that.forceSafariPlayAudio, false) this.audioEl.addEventListener('play', function() { window.removeEventListener('touchstart', that.forceSafariPlayAudio, false); }, false);
window.addEventListener('touchstart', that.forceSafariPlayAudio, false);
this.audioEl.src = './static/music.mp3'; })
|