Я использую событие ended
в JavaScript, чтобы узнать, когда закончится воспроизведение звука.В 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 сообщает об исключении в строке 1 html-документа!
Почему это происходит?