Воспроизведение аудио в слушателе событий все еще дает ошибку - PullRequest
0 голосов
/ 18 декабря 2018

У меня это в окне load функция слушателя.

var audio = new Audio();
audio.src = "assets/silence.mp3";
audio.load();
document.getElementById("body").addEventListener(
  'touchstart',
  function(evt){ audio.play(); audio = 0; },
  {capture:false,once:true,passive:true}
);

В Chrome на Android (с открытой удаленной отладкой) я касаюсь экрана, и он (правильно) вызывает попытку воспроизведения аудио,Однако, это терпит неудачу и регистрирует это к консоли:

(index):65 Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first.

Как иначе я должен запускать звук таким образом, который гарантирует, что пользователь инициирует его, если не через взаимодействие с пользователемслушатель событий?

1 Ответ

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

ах.Оказывается, touchstart не считается «взаимодействием с пользователем» с точки зрения механизмов, препятствующих автоматическому воспроизведению.

решение: поменяйте его местами с click.

.Я все еще разочарован:

Я использую этот конкретный фрагмент как средство очень быстрого разрешения воспроизведения звука на странице, чтобы основная html5-игра могла воспроизводить звук, не беспокоясь о его блокировкебраузер.

однако - потому что он должен ждать полного события «щелчка» (в отличие от события «touchstart»), любой звук, который должен быть запущен при «touchstart»будет пройден (впервые он будет запущен).кажется, что 1. нет способа обойти это, чтобы использовать его так, как я хотел бы, и 2. если вы в любом случае можете просто прослушать весь документ для «щелчка», это на самом деле ничего не делает от остановкиНежелательный звук.

Если кто-нибудь сможет найти лучшее решение, я поменяю на него «правильный ответ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...