В Safari не сработало голосовое событие
Насколько я могу судить, событие Voiceschange не происходит в Safari ни на Mac, ни на iOS. Также странно, что он не работает в Chrome на iOS, но я предполагаю, что Chrome на iOS использует тот же движок JavaScript, что и Safari.
Вот демонстрация, которую я использовал для проверки: http://jsbin.com/gosaqihi/9/edit?js,console (взят из раздела Получение списка голосов в 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 для Mac и iOS. Насколько я могу судить, Safari просто не запускает событие Voiceschange.
Сложно, у меня нет никаких устройств Apple, поэтому я должен был это выяснить, когда друзья что-то пробуют.
Что-то особенное мне нужно сделать в Safari, чтобы получить список голосов? Или API речевого синтеза просто (полностью) еще не реализован?
1 ответ
Очевидно, Safari пока имеет лишь частичную поддержку API Web Speech.
Что вы могли бы сделать для того, чтобы ваш код работал в разных средах, это определить, onvoiceschanged
существует в speechSynthesis
, Если нет, вы можете просто позвонить speechSynthesis.getVoices()
без прослушивания onvoiceschanged
,
function doVoices() {
var voices = speechSynthesis.getVoices(),
// ...
}
if ('onvoiceschanged' in speechSynthesis) {
speechSynthesis.onvoiceschanged = doVoices;
} else {
doVoices();
}