据我所知,无论是在 Mac 上还是在 iOS 上,voiceschanged 事件都不会在 Safari 中触发。同样奇怪的是,它似乎也不会在 iOS 上的 Chrome 中触发,但我假设 iOS 上的 Chrome 使用与 Safari 相同的 JavaScript 引擎。
这是我用来验证的演示:http: //jsbin.com/gosaqihi/9/edit ?js,console (取自Getting the list of voices in speechSynthesis of Chrome (Web Speech API))
我也尝试过使用 addEventListener:
speechSynthesis.addEventListener("voiceschanged", function () {
var voices = speechSynthesis.getVoices(),
keys = Object.keys(voices[0]),
i, j;
document.write("<table border=1><tr>");
for ( i = 0; i < keys.length; i++ ) {
document.write("<td>" + keys[i] + "</td>");
}
document.write("</tr>");
for ( i = 0; i < voices.length; i++ ) {
document.write("</tr>");
for ( j = 0; j < keys.length; j++ ) {
document.write("<td>" + voices[i][keys[j]] + "</td>");
}
document.write("</tr>");
}
document.write("<table>");
}, false);
这两种方法(onvoiceschanged、addEventListener)在适用于 Windows、Android 和 Mac 的 Chrome 中都可以正常工作,但在适用于 iOS 的 Chrome 和适用于 Mac 和 iOS 的 Safari 上都失败了。据我所知,Safari 根本不会触发 voiceschanged 事件。
让事情变得复杂的是,我实际上并不拥有任何 Apple 设备,所以我不得不通过让朋友尝试来解决这个问题。
我需要在 Safari 中做些什么来获取声音列表吗?还是语音合成 API 还没有(完全)实现?