限制背景
chrome、safari、firefox、edge等浏览器都在某版本后限制了audio自动播放功能,必须要用户与当前页面有交互后,才能激活自动播放,否则报错。
play() failed because the user didn’t interact with the document first
chrome 自动播放策略变化
原文如下:
in order to improve the user experience, minimize incentives to install ad blockers, and reduce data consumption on expensive and/or constrained networks
本意是减少广告杂音对用户的影响以及节省流量
解决方式1:引导用户行为,添加交互
我们发现只要与浏览器有过交互后以上方式才能生效。
啥叫有过交互,即进入页面后手动点击一下页面任意地方就可以了,但是我们又不能保证用户使用时会点击页面,所以可以判断一下如果自动播放可以成功就自动播放,反之先提示一下是否允许网页播放弹框,用户有个点击操作,就可以自动播放了。
const promise = music.play();
if(promise !== undefined) {
promise.then(() => {
console.log('--播放成功--');
music.play();
}).catch(() => {
console.log('--播放失败--');
//弹框提示,获取点击事件,重新播放
})
}
解决方式2:设置浏览器
如果用户使用少,涉及电脑少,或临时处理,可采用调整浏览器自身策略的方案