react自动播放音频错误修复play() failed because the user didn‘t interact with the document first.

错误信息App.js:76 Uncaught (in promise) NotAllowedError: play() failed because the user didn’t interact with the document first.

浏览器拦截针对自动播放音频时的默认拦截行为

需求是chorme浏览器前端开发的时候,想自动播放音频报错

为什么会出现这个问题?

这个错误是由于浏览器的自动播放策略引起的。现代浏览器(如 Chrome)会阻止页面自动播放音频或视频,尤其是在没有用户交互的情况下。这个策略旨在改善用户体验,防止网站在没有用户同意的情况下自动播放媒体内容。

解决方法

  1. 添加muted属性muted是静音的效果
 <audio ref={audioRef} controls preload="auto" muted onEnded={handleAudioEnd} style={{ display: 'none' }} >
          <source src='./音频.mp3' />
  </audio>
  1. 设置浏览器权限打开声音权限
    在这里插入图片描述
  2. 在生命周期的钩子函数中添加逻辑代码

先设置静音,等加载完成以后再开启播放

  const audioRef = useRef(null);  // 用于控制音频播放的ref
   useEffect(() => {
    if (audioRef.current) {
        // 设置音频静音,浏览器允许自动播放
        audioRef.current.play().then(() => {
          // 自动播放成功后取消静音
          audioRef.current.muted = false;
        }).catch((error) => {
          console.log("自动播放失败", error);
        });
      }
    }, [])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值