Код JavaScript для window.SpeechSynthesis не работает из локального хоста

#javascript #google-chrome-devtools #text-to-speech

Вопрос:

Следующий код отлично работает в Chrome DevTools, но когда я запускаю его через localhost allVoices , возвращается пустой массив.

 tts = window.speechSynthesis

// from here code only works if put into DevTools, not from file or localhost
allVoices = tts.getVoices()

console.log(allVoices) // gives empty array
 

Что я делаю не так?

Ответ №1:

В Chrome getVoices() возвращает пустое значение, затем происходит событие, когда голоса готовы, onvoiceschanged, которое принимает обратный вызов.

Ваши команды работают в DevTools, потому что к тому времени, когда вы наберете » allVoices = tts.getVoices ()», голоса уже поступили и доступны.

Однако другие браузеры, например Safari, синхронно возвращают голоса, и нет необходимости в обратном вызове.

Поэтому лучшим кодом, по-видимому, является:

 let voices = speechSynthesis.getVoices();
  if (voices.length) {
    resolve(voices);
    return;
  }
  speechSynthesis.onvoiceschanged = () => {
    voices = speechSynthesis.getVoices();
    if (voices.length) resolve(voices);
  };