Safari 中未触发变声事件
voiceschanged event not fired in Safari
据我所知,voicechanged 事件不会在 Safari 中触发,无论是在 mac 上还是在 iOS 中。同样奇怪的是,它似乎也没有在 iOS 上的 Chrome 中触发,但我假设 iOS 上的 Chrome 使用相同的 JavaScript 引擎野生动物园.
下面是我用来验证的演示:http://jsbin.com/gosaqihi/9/edit?js,console (taken from 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)在 Chrome Windows、Android 和 Mac 中工作正常,但在 Chrome 上 iOS 和 Safari 上 iOS 失败=35=] 和 iOS。据我所知,Safari 根本不会触发 voicechanged 事件。
复杂的是,我实际上没有任何 Apple 设备,所以我不得不通过让朋友尝试来解决这个问题。
我需要在 Safari 中做些什么来获取语音列表吗?还是语音合成 API 还没有(完全)实现?
Apparently Safari 目前仅部分支持网络语音API。
要使您的代码在不同环境中工作,您可以做的是检测 onvoiceschanged
是否存在于 speechSynthesis
中。如果没有,您可以直接调用 speechSynthesis.getVoices()
而无需监听 onvoiceschanged
.
function doVoices() {
var voices = speechSynthesis.getVoices(),
// ...
}
if ('onvoiceschanged' in speechSynthesis) {
speechSynthesis.onvoiceschanged = doVoices;
} else {
doVoices();
}
据我所知,voicechanged 事件不会在 Safari 中触发,无论是在 mac 上还是在 iOS 中。同样奇怪的是,它似乎也没有在 iOS 上的 Chrome 中触发,但我假设 iOS 上的 Chrome 使用相同的 JavaScript 引擎野生动物园.
下面是我用来验证的演示:http://jsbin.com/gosaqihi/9/edit?js,console (taken from 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)在 Chrome Windows、Android 和 Mac 中工作正常,但在 Chrome 上 iOS 和 Safari 上 iOS 失败=35=] 和 iOS。据我所知,Safari 根本不会触发 voicechanged 事件。
复杂的是,我实际上没有任何 Apple 设备,所以我不得不通过让朋友尝试来解决这个问题。
我需要在 Safari 中做些什么来获取语音列表吗?还是语音合成 API 还没有(完全)实现?
Apparently Safari 目前仅部分支持网络语音API。
要使您的代码在不同环境中工作,您可以做的是检测 onvoiceschanged
是否存在于 speechSynthesis
中。如果没有,您可以直接调用 speechSynthesis.getVoices()
而无需监听 onvoiceschanged
.
function doVoices() {
var voices = speechSynthesis.getVoices(),
// ...
}
if ('onvoiceschanged' in speechSynthesis) {
speechSynthesis.onvoiceschanged = doVoices;
} else {
doVoices();
}