Воспроизведение аудио файла возвращает «Uncaught (in обещание)», но работает в консоли - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь воспроизвести аудио файлы (я пробовал много).Все они в формате mp3.Я проверил следующее на локальном хосте MAMP, а также просто запустив его в браузере.

Я использую следующий код 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.

1 Ответ

0 голосов
/ 14 декабря 2018

Если вы прочитаете полное сообщение об ошибке, связанное с исключением, вы получите более точное объяснение:

❌ Uncaught (в обещании) DOMException: play () не удалось, потому что пользователь не сделалвзаимодействовать с документом в первую очередь. https: //goo.gl/xX8pDD

Статья Google " Изменения политики автозапуска " (ссылка на которую приведена в сообщении выше) подробно объясняет ситуацию.

Короткая версия: если вы хотите воспроизвести аудио или видео, вам нужно подождать, пока пользователь нажмет что-нибудь на странице.

...