据我所知,无论是在Mac还是iOS上,Safari浏览器都不会触发voiceschanged事件。同样奇怪的是,在iOS上的Chrome浏览器似乎也不会触发该事件,但我假设iOS上的Chrome使用与Safari相同的JavaScript引擎。
以下是我用来验证的演示:http://jsbin.com/gosaqihi/9/edit?js,console(摘自获取Chrome(Web Speech API)语音合成中声音列表)
我还尝试使用addEventListener:
以下是我用来验证的演示:http://jsbin.com/gosaqihi/9/edit?js,console(摘自获取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);
在Windows、Android和Mac的Chrome浏览器中,使用onvoiceschanged和addEventListener两种方法都能正常工作,但在iOS版Chrome浏览器和Safari浏览器上则无法正常工作。据我所知,Safari浏览器根本不会触发voiceschanged事件。
更加复杂的是,我自己并没有苹果设备,所以只能让朋友来试验。
在Safari浏览器中获取语音列表需要进行特殊处理吗?还是说语音合成API尚未(完全)实现?