javascript - 使用 javascript 播放音频
问题描述
我试图在用户进入我的网站页面后一分钟播放哔声。我在这里找到了解决方案https://stackoverflow.com/a/18628124/912359
这是我的代码:
$(document).ready(function(){
setTimeout(function () {
try{
if(!$(".facebook-chat").hasClass("active")){
$(".facebook-chat").addClass("active");
var audio = new Audio("/sound/chat.mp3");
audio.play();
}
}catch(e){
}
}, 60000);
}):
这会引发异常:
未捕获(承诺)DOMException
奇怪的是,一旦我在浏览器中单独加载声音文件并返回页面,它就可以完美运行。任何想法我可以如何解决它。
[编辑] 问题是用户必须与浏览器交互才能播放声音。所以我将相同的代码放在正文的点击事件下,它可以工作。但同样不适用于滚动事件。我猜 chrome 不考虑滚动用户交互。任何人都可以添加可以用来触发此的其他交互吗?
此外,如果我在单独的窗口中加载音频文件并返回我的页面,它是如何工作的。
解决方案
您可以在文档准备好时尝试加载音频,然后仅在加载资源后才播放(对于此检查,您可以在 上注册回调onloadeddata
)。否则,如果资源没有加载,您可以尝试再次加载它。
$(document).ready(function()
{
let aud = new Audio('https://dl.dropboxusercontent.com/s/1cdwpm3gca9mlo0/kick.mp3');
let canPlay = false;
aud.onloadeddata = () => (console.log("audio loaded"), canPlay = true);
setInterval(function()
{
if (canPlay)
aud.play();
else
aud = new Audio('https://dl.dropboxusercontent.com/s/1cdwpm3gca9mlo0/kick.mp3');
}, 3000);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
推荐阅读
- c# - 如何使用托管在 docker 中的 c# 应用程序调用 bash 脚本,这将对主机进行更改
- php - JSON_PRETTY_PRINT 没有按预期工作
- android - 如何监控 android Camera 的当前 FocalLength (re-asked)
- c - 关于c中文字字符串的内存分配问题
- sql - 在 1:N 关系表中不显示重复数据的查询
- django - 在 Django 模板中计算一个单词出现的次数
- javascript - 更新画布上单个像素的最有效方法
- datagridview - 角度材料数据表 - 它不显示提供给它的完整行数
- python - 如何限制用户在 Python 中只输入字母?
- spring-boot - 如何检查是否存在 CAS 令牌