DOMException:play() 失败,因为用户在选项卡失焦后未进行交互

DOMException: play() failed because the user didn't interact after tab goes out of focus

提问人:Dan 提问时间:11/2/2023 更新时间:11/2/2023 访问量:42

问:

我正在建立一个具有各种重复计时器的网站。当计时器响起时,它会播放一个简短的音频通知。

最初,一切正常。但是,在用户最小化窗口并使其保持空闲一段时间后,音频播放开始引发以下错误。

未捕获(承诺中) DOMException:play() 失败,因为用户没有先与文档交互。

似乎在一些随机时间后,为使音频正常工作而进行的初始用户交互被重置,用户需要再次与网站交互以保持音频通知的播放。

这显然是一个问题,但我无法找到任何解决这个特定问题的东西。

我正在通过 HTML5 音频 API 加载和播放音频

// initiate audio object
const audio = new Audio('/audio/ping.mp3') 
// after some time a timer calls
audio.play()

任何见解或朝着正确方向的推动将不胜感激!谢谢!

JavaScript HTML 谷歌浏览器 HTML5 音频

评论

1赞 Barmar 11/2/2023
我认为这是一个故意的设计,以防止背景选项卡自动播放。
0赞 Rory McCrossan 11/2/2023
我不相信你可以做很多事情来解决这个问题。关于媒体播放的 DOM 交互规则由浏览器严格控制。
0赞 Dan 11/2/2023
任何想法 音乐网站,如SoundCloud,可以解决这个问题吗?他们似乎一直在玩,没有后续的用户互动。
0赞 spender 11/2/2023
我怀疑,如果您播放连续音频(它可以是无声的),并将音频混合并排序到此音频流中,您可能会很好。当然,这并非平凡。developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/......看起来是一个很好的起点。我想知道生成无声、不间断的声音是否足以防止权限超时?

答: 暂无答案