javascript - Uncaught (in promise) DOMException: play() failed 因为用户没有先与文档交互
问题描述
var buttonColours = ["red", "blue", "green", "yellow"];
var gamePattern = [];
function nextSequence() {
var randomNumber = Math.floor(Math.random() * 4);
var randomChosenColour = buttonColours[randomNumber];
gamePattern.push(randomChosenColour);
$("#" + randomChosenColour).fadeIn(100).fadeOut(100).fadeIn(100);
var audio = new Audio("sounds/" + randomChosenColour + ".mp3");
audio.play();
}
nextSequence();
play() 函数不起作用,它给出错误“未捕获(承诺中)DOMException:play() 失败,因为用户没有首先与文档交互。”
建议一些修复。
解决方案
这是大多数现代浏览器中的一项功能,可防止网站开发人员进行恶意/垃圾邮件操作。所以基本上网页将无法自动播放视频/音频,除非用户首先与网站交互(点击、悬停、点等)。
因此,在您的情况下,nextSequence()
应该在用户单击某些东西时调用。
document.getElementById("playbutton").addEventListener("click", nextSequence);
推荐阅读
- c - 从屏幕读回字符串的 C 函数是什么?
- excel - 使用 Azure 数据工厂将 Excel OneDrive 转换为 Blob
- php - PHP多维数组使用另一个值按值搜索
- p5.js - 如何使用 p5.js /p5.play 让所有精灵移动到不同的吸引力点
- r - 使用 scale_x_datetime() 设置限制会在 ggplot 中静默放置条形图
- java - spring cloud stream - StreamBridge - 当远程目的地没有人消费消息时,消息不会进入DLQ
- c++ - 使用标记值和计数器控制从文件中获取数据
- node.js - 在 Flutter 中显示 JSON 数据
- c++ - 无法使用 lambda 初始化模板 constexpr 成员变量
- .net - 在 Refit Proxy 和 DelegatingHandler 之间传递值