Javascript 为什么Google Chrome中的speechSynthesis.getVoices()返回空列表?

Javascript 为什么Google Chrome中的speechSynthesis.getVoices()返回空列表?,javascript,google-chrome,dom,speech,Javascript,Google Chrome,Dom,Speech,我想访问桌面Chrome、Safari和Firefox上SpeechSynthesisAPI中的语音列表。如果我在每个浏览器中打开一个新选项卡,并通过控制台运行: speechSynthesis.getVoices() …我希望返回包含“SpeechSynthesisVoice”对象(即可用语音)的数组。Firefox和Safari的行为与预期一致,但在Chrome中,对getVoices()的第一次调用返回一个空数组。我必须再次调用该方法才能接收预期填充的数组 为什么Chrome会这样?它是

我想访问桌面Chrome、Safari和Firefox上SpeechSynthesisAPI中的语音列表。如果我在每个浏览器中打开一个新选项卡,并通过控制台运行:

speechSynthesis.getVoices()
…我希望返回包含“SpeechSynthesisVoice”对象(即可用语音)的数组。Firefox和Safari的行为与预期一致,但在Chrome中,对getVoices()的第一次调用返回一个空数组。我必须再次调用该方法才能接收预期填充的数组


为什么Chrome会这样?它是否对某些web API进行了某种延迟加载?请帮助我理解。

之所以会发生这种情况,是因为SpeechSynthesis API允许使用远程服务器进行语音合成,而Chrome会从谷歌的服务器请求语音列表。要解决此问题,您需要等待语音加载,然后再次请求

为此,您应该先听a,然后初始化程序逻辑:

speechSynthesis.addEventListener(“voiceschanged”,()=>{
const voices=speechSynthesis.getVoices()
})

可能重复@esqew它是重复的,但有更简短、更相关的问题。也许这就是修改你提到的问题的原因。