JavaScript 中是否有一些语音或语音就绪事件?

Is there some voice or speech ready event in JavaScript?

我在 Google Chrome 上尝试了以下操作。它会打印出 0 个声音,并在我的计算机上再次打印出 0 个声音,但是如果我 重新加载页面以重新开始, 并更改最后一个行到 setTimeout(foo, 1000),然后第一行将打印出 0 和第二行,87.

甚至可以把号码改成6633也能用,但我不确定这是否取决于计算机速度和网络速度(用于获取语音数据。 (可能是内部网络流量,因为我在调试器的网络选项卡中没有看到任何流量)。

是否有更可靠的方法来获取类似于 DOMReady 事件的 ready 事件或某种调用回调的方法,以便更可靠? (而不是使用 setTimeout 延迟未知的持续时间并希望最好的)。

function foo() {
  msg = new SpeechSynthesisUtterance(),
    voices = window.speechSynthesis.getVoices();

  console.log("How many voices", voices.length);

  msg.text = "Hello World";
  speechSynthesis.speak(msg);
}

foo();
setTimeout(foo, 0);   // just try again in the next event cycle

voiceschanged event 可能有帮助:

The voiceschanged event of the Web Speech API is fired when the list of SpeechSynthesisVoice objects that would be returned by the SpeechSynthesis.getVoices() method has changed (when the voiceschanged event fires.)