Вопрос о том, можно ли запускать speechSynthesis без взаимодействия с пользователем - PullRequest
1 голос
/ 28 октября 2019

Кажется, что речь на некоторых устройствах не может запускаться без взаимодействия с пользователем, иногда. Мой ПК-браузер раньше предупреждал об этом, но теперь он работает (я не знаю, смог ли я случайно что-то случайно изменить в разрешениях), в то время как мой планшет на платформе Android, кажется, позволяет с localhost до http, но запрещает его на моей производственной площадке https. Телефоны всегда это запрещают.

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

1 Ответ

1 голос
/ 28 октября 2019

Это зависит от браузера. По крайней мере, 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 выглядит кактолько иначе.

...