Asm*_*mor 2 javascript safari html5 speech-synthesis webspeech-api
据我所知,在Mac或iOS中,在Safari中均不会触发voiceschanged事件。同样奇怪的是,它似乎也没有在iOS上的Chrome中启动,但是我假设iOS上的Chrome使用与Safari相同的JavaScript引擎。
这是我用来验证的一个演示:http : //jsbin.com/gosaqihi/9/edit?js,控制台(摘自“ 获取语音中的语音列表”,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);
Run Code Online (Sandbox Code Playgroud)
两种方法(onvoiceschanged,addEventListener)在Windows,Android和Mac的Chrome浏览器中都可以正常运行,但在iOS的Chrome和Mac和iOS的Safari浏览器中无法运行。据我所知,Safari根本不会触发变声事件。
复杂的事情,我实际上没有任何苹果设备,因此我不得不通过让朋友尝试一下来弄清楚。
我需要在Safari中做一些特别的事情来获取声音列表吗?还是仅仅(尚未)完全实现语音合成API?
显然,到目前为止,Safari仅部分支持Web Speech API。
你可以为你的代码在不同的环境中工作,做的是检测是否onvoiceschanged存在speechSynthesis。如果没有,您可以直接通话speechSynthesis.getVoices()而无需收听onvoiceschanged。
function doVoices() {
var voices = speechSynthesis.getVoices(),
// ...
}
if ('onvoiceschanged' in speechSynthesis) {
speechSynthesis.onvoiceschanged = doVoices;
} else {
doVoices();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
633 次 |
| 最近记录: |