javascript - 为什么无法使用具有自动播放属性的 HTML 音频标签获得声音
问题描述
我试图为培训师制作一个 creat html 页面。所以我想要有自动播放的起始页声音音频。但是,当我打开起始页时,此音频文件不会自动播放。我用chrome浏览器测试过
这是我的代码:
<audio id="myautoload" autoplay>
<source src="https://www.w3schools.com/tags/horse.mp3" type="audio/mpeg">
</audio>
<script> document.getElementById('myautoload').play(); </script>
我用了另一种方式,它也不会自动播放
var myadido = document.getElementById("myautoload");
myadido.addEventListener("canplay", function() {
{
setTimeout(function() {
myadido.play();
},500);
});
我已经尝试了您的解决方案,但音频仍然无法播放。
希望大家帮帮我,非常感谢
解决方案
音频标签需要id="myaudio"
像这样:
<audio id="myaudio" autoplay>
<source src="https://www.w3schools.com/tags/horse.mp3" type="audio/mpeg">
</audio>
<script> document.getElementById('myaudio').play(); </script>
您在底部的脚本会查找带有 id 的标签,'myaudio'
并调用play()
它来播放音频剪辑。
在 chrome 70.0.3538 中测试
编辑
您遇到的错误基本上是因为调用 play 方法返回的承诺没有被捕获(请参阅下面的代码以处理承诺)。
然而,除此之外 ,Chrome 的自动播放政策将在本月发生变化,这将影响在 Chrome 上自动播放的能力。简而言之,如果您想在网页上自动播放音频,则需要权限,否则您需要等待用户交互才能播放音频。
下面是一个示例,它将检查您是否可以自动播放(AudioContext 的状态将立即转换为“正在运行”),否则它将在用户交互后开始播放(用户按下按钮)。
<!doctype html>
<html><head></head>
<body>
<button> start</button>
<audio id="myaudio" autoplay>
<source src="https://www.w3schools.com/tags/horse.mp3" type="audio/mpeg"/>
</audio>
<script>
var context;
window.onload = function() {
context = new AudioContext();
context.onstatechange = function() {
//if you have permissions, the audioContext will transition to 'running' immediately
if(context.state == 'running') {
play();
}
}
};
function play() {
//ensure the promise is handled here
var promise = document.getElementById('myaudio').play();
if (promise !== undefined) {
promise.then(_ => {
console.log("playing");
}).catch(error => {
// Autoplay was prevented.
});
}
}
//play after the user interacts with the page
document.querySelector('button').addEventListener('click', function() {
context.resume().then(function() {
play();
});
});
</script>
</body>
</html>
推荐阅读
- deep-learning - 我如何在没有导入错误的情况下运行 Nvidia Digits
- angular - Angular 9 和 .NET Core 应用程序部署在本地 IIS 上的同一文件夹下(找不到此本地主机页面)
- docker - 错误:无法从“/usr/src/app”中找到模块“./build/index.js”
- reactjs - 谷歌在 NestJS 后端使用 PassportStrategy 登录无法由 React WebApp 调用
- javascript - 如何使用 JavaScript/TypeScript 在类代理处理程序中获取属性描述符
- sql - PostgreSQL——如何生成带有外键约束的随机数行假数据?
- python - 如何在 python 中不使用 cv2.HoughCircle 实现 Hough 变换进行圆检测
- angular - 如何查看表单的 valueChanges 并获取表单控件名称?
- javascript - 在执行 useState 之前设置 useState 挂钩的初始值
- python - 如何解决“数组必须都是相同长度”错误