尝试播放声音时出现“播放()失败,因为用户没有先与文档交互”错误(javascript/html)

Posted

技术标签:

【中文标题】尝试播放声音时出现“播放()失败,因为用户没有先与文档交互”错误(javascript/html)【英文标题】:Getting "play() failed because the user didn't interact with the document first" error when trying to play sound (javascript/html) 【发布时间】:2020-03-09 18:40:22 【问题描述】:

我正在尝试使用 javascript 在网页上播放声音,但每当我这样做时,都会出现上述错误。这是我的代码:

if (thing.startsWith("0")) 
    var a = new Audio("audio.mp4");
    a.play();

此外,如果您打开控制台,声音会自动开始播放。

【问题讨论】:

哪里出错了? 在控制台中。 How to handle "Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first." on Desktop with Chrome 66?的可能重复 不,我的意思是您没有在问题中包含错误,您说“我收到上述错误”但问题中没有错误。 @LeviBlodgett 这是问题的标题。 【参考方案1】:

这是因为 Google 更新了其自动播放政策,因此用户必须先与播放声音的窗口进行一些交互,例如“开始”按钮,然后您才能播放声音。发生这种情况是因为对于许多用户来说,突然播放声音很烦人。

【讨论】:

我知道这是一篇旧帖子,但有趣的是 Youtube 归 Google 所有,但至今仍不遵守该政策。 @avisk,YouTube 使用的技术已知吗?有些人可能会尝试亲自调查,但可能已经共享。 "一些交互" 但是没有列表说明这是什么意思,滚动不算数,也没有确认警报,似乎只有点击?【参考方案2】:
var resp = audio.play();

if (resp!== undefined) 
    resp.then(_ => 
        // autoplay starts!
    ).catch(error => 
       //show error
    );

这段代码帮助我删除了控制台的警告

【讨论】:

以上是关于尝试播放声音时出现“播放()失败,因为用户没有先与文档交互”错误(javascript/html)的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试显示文本,单击时播放音频,当声音结束时出现新文本,单击时播放新音频

在 Mac 上使用 OpenAL 播放音频时出现随机噪音

使用 Android MediaPlayer 播放声音时出现问题

Android - 从资产文件夹播放声音时出现问题

资源被解释为文档,但在 Chrome 控制台中传输时出现 MIME 类型音频/mpeg 错误,导致无法播放声音

在 vb 中播放音频时出现 AccessViolationException