限制背景

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:引导用户行为,添加交互

我们发现只要与浏览器有过交互后以上方式才能生效。
啥叫有过交互,即进入页面后手动点击一下页面任意地方就可以了,但是我们又不能保证用户使用时会点击页面,所以可以判断一下如果自动播放可以成功就自动播放,反之先提示一下是否允许网页播放弹框,用户有个点击操作,就可以自动播放了。

  1. const promise = music.play();
  2. if(promise !== undefined) {
  3. promise.then(() => {
  4. console.log('--播放成功--');
  5. music.play();
  6. }).catch(() => {
  7. console.log('--播放失败--');
  8. //弹框提示,获取点击事件,重新播放
  9. })
  10. }

解决方式2:设置浏览器

如果用户使用少,涉及电脑少,或临时处理,可采用调整浏览器自身策略的方案