我正在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行报告了异常!
为什么会这样?