Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 播放音频文件返回“返回”;未兑现的(承诺中的)“;但在控制台中工作_Javascript_Html_Asynchronous_Audio_Html5 Audio - Fatal编程技术网

Javascript 播放音频文件返回“返回”;未兑现的(承诺中的)“;但在控制台中工作

Javascript 播放音频文件返回“返回”;未兑现的(承诺中的)“;但在控制台中工作,javascript,html,asynchronous,audio,html5-audio,Javascript,Html,Asynchronous,Audio,Html5 Audio,我正在尝试播放音频文件(我尝试了很多)。它们都是MP3。 我已经在MAMP localhost上测试了以下内容,并且只在浏览器中运行了它 我使用以下javascript: var testSound = new Audio(); testSound.src = "a.mp3" setTimeout(testSound.play.bind(testSound),100) 这将返回错误: Uncaught (in promise) 试图抓住它: var testSound = new Audio

我正在尝试播放音频文件(我尝试了很多)。它们都是MP3。 我已经在MAMP localhost上测试了以下内容,并且只在浏览器中运行了它

我使用以下javascript:

var testSound = new Audio();
testSound.src = "a.mp3"
setTimeout(testSound.play.bind(testSound),100)
这将返回错误:

Uncaught (in promise)
试图抓住它:

var testSound = new Audio();
testSound.src = "a.mp3"
setTimeout(playSound,100)
function playSound () {
    testSound.play().then(response => {

    }).catch(e => {
        console.log(e);
    })
}
不返回任何内容(
“”

但如果我现在转到控制台并简单地键入:

testSound.play()
声音按预期播放

即使我对第一个代码段的第三行进行了如下注释:

//setTimeout(testSound.play.bind(testSound),100)
编辑:

即使人们不知道解决方案是什么,我仍然有兴趣知道他们是否能够重现错误

编辑2:


顺便说一句,这个问题在Firefox或Safari中并不存在。

如果您阅读了与异常相关的完整错误消息,您会得到更好的解释:

❌ 未捕获(承诺中)DomeException:play()失败,因为用户没有首先与文档交互

谷歌的文章“”(链接在上面的消息中)详细解释了这种情况


简短的版本是:如果你想播放音频或视频,你需要等到用户单击页面上的某个内容后再播放。

我没有收到如此详细的错误,只有我显示的错误。当我抓到它时,它没有显示出我上面详述的那样好。我听错了吗?尽管如此,非常感谢您的帮助,这似乎是问题所在。有没有办法在没有人机交互的情况下播放音频?是的。可以在没有用户交互的情况下播放视频document.getElementById('video').autoplay=true;document.getElementById('video').mute=true;document.getElementById('video').play()```