Это зависит от браузера. По крайней мере, Chrome по умолчанию разрешал речь без взаимодействия с пользователем, но это немного изменилось назад . Один хакерский способ проверки состоит в том, чтобы поставить в очередь пустое высказывание, а затем посмотреть, является ли SpeechSynthesis.speaking
или SpeechSynthesis.pending
true
:
// Allowed:
btn.onclick = () => {
speechSynthesis.speak(new SpeechSynthesisUtterance(''));
const worked = speechSynthesis.speaking || speechSynthesis.pending;
console.log(worked);
};
<button id="btn">click</button>
// Not allowed, silent failure:
speechSynthesis.speak(new SpeechSynthesisUtterance(''));
const worked = speechSynthesis.speaking || speechSynthesis.pending;
console.log(worked);
К сожалению, speechSynthesis.speak
не генерирует (даже асинхронно), когда речь предотвращается из-за отсутствия взаимодействия с пользователем, поэтому проверка свойства speaking
выглядит кактолько иначе.