javascript - chrome上的音频有时会起作用,有时不起作用
问题描述
playSound : function() {
var audio = new Audio(audio.mp3);
audio.play();
}
我正在使用上面的代码来简单地播放音频。但我面临以下两个问题:
- 在我单击选项卡之前,声音永远不会播放(为此,我转到另一个选项卡,然后单击当前选项卡)。似乎在播放声音之前需要一个事件。
- 有时我得到异常并且音频从不播放“未捕获(承诺)DOMException:play() failed because the user didn't首先与文档交互。”
我不想弄乱 HTML 元素。
解决方案
您可能会在 Chrome 发布的网站上看到自动播放媒体的政策更改:https ://developers.google.com/web/updates/2017/09/autoplay-policy-changes
本质上,该策略表示除非用户在您的媒体上进行交互并且您的处理程序* 不会同步启动媒体,否则它不会播放。
注意同步这个词 - 你甚至不能使用 setTimeout 或类似的东西。这是为了保护用户免受垃圾广告等的侵害。其他浏览器也有此设置,但默认情况下它们可能并且很可能会启用此功能,因此您最好做好准备。
[*] - (例如点击处理程序)
推荐阅读
- api - 如何使用 CURL 向 Web API 发送获取请求?
- ajax - 在 tinymce 上显示 onclick 事件
- r - 关于最短子字符串实现问题,如何提高 R 代码的速度?
- javascript - ESlint 错误,类型 '() => Promise
' 缺少来自类型 'Promise 的以下属性 ':然后,抓住,[Symbol.toStringTag],最后 - javascript - *ngFor 不显示数据
- asp.net-core - 带有 B2C 登录的 ASP.NET Core 3.x - 检索 SessionId
- laravel-seeding - Laravel 8 数据库工厂
- azure - 在 SFTP 中循环多个文件夹并将它们转储到 Blob
- c# - 命名空间“http://yyy”中的子元素“xxx”无效,而 xml 中实际上没有额外的命名空间设置
- jquery - 当我对一个元素使用 scale CSS 函数时,它的文本大小会发生变化,尽管它的字体大小是相同的。我想在重新缩放后保持文本大小