DOMException: play() failed because the user didn‘t interact with the document first

报错原因是chrome新特性,内容大致意思是开发者不能利用手中权限去给用户造成噪音干扰,首次加载页面需要用户和audio/video进行交互

需求如下
实时刷新告警列表,保证用户获取到最新告警消息,当有新的告警消息时,响警报铃

解决方案
在这里插入图片描述
当用户首次进入页面时给提示用户启用告警铃声

let audioPlay = document.getElementById('myaudio')

audioPlay.play()

setTimeout(() => {
  audioPlay.pause()
  audioPlay.load()
}, 10)

首次点击与audio交互,设置10毫秒用户也并不会听到铃声,再次使用时设置告警时间即可

其它解决方案如下:

  • 准备工作
// 检查自动播放支持情况
const promise = document.querySelector('video').play();
if (promise !== undefined) {
  promise.catch(error => {
    // 自动播放被阻止
    showPlayButton(); // 显示播放按钮
  }).then(() => {
    // 自动播放成功
  });
}
  • 方案1
// 在用户点击/触摸等交互事件后播放音频
document.addEventListener('click', function() {
  const audio = new Audio('sound.mp3');
  audio.play().catch(e => console.log('播放失败:', e));
}, { once: true }); // 只监听一次
  • 方案2
// 静音自动播放+用户交互后取消静音
const video = document.querySelector('video');
video.muted = true; // 必须静音才能自动播放
video.play().then(() => {
  // 用户交互后取消静音
  document.addEventListener('click', () => {
    video.muted = false;
  }, { once: true });
});
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值