警报框导致“结束”音频事件在Chrome中被调用两次

时间:2019-04-05 14:02:28

标签: javascript google-chrome events audio

我正在JavaScript中使用ended事件来知道声音何时结束播放。在Chrome中,如果声音结束时警报框打开,则事件代码将在该框关闭后 执行。但是,在这种情况下,事件代码通常称为两次,后跟DOM异常。

例如,在以下代码中:

var sound = new Audio();
sound.src = "sound.mp3";
sound.onended = function(event){ console.log('Playing ended.'); }

function play() {
    sound.play();
    alert("Sound is playing...");
}

如果您调用play()函数,则在第一次调用时一切正常。但是,随后的所有调用都会向控制台输出两次“播放结束”并发出Uncaught (in promise) DOMException ,如果您保持警报框打开,直到声音播放完毕。令人困惑的是,Chrome浏览器在html文档的第1行报告了异常!

为什么会这样?

0 个答案:

没有答案