#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);
};