Насколько я могу судить, событие, записанное в голосовании, не срабатывает в Safari, либо на Mac, либо в iOS. Также нечетно, он, похоже, не срабатывает в Chrome на iOS, но я предполагаю, что Chrome на iOS использует тот же механизм JavaScript, что и Safari.событие voiceschanged не запущено в Safari
Вот доказательство того, что я использовал для проверки: 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) прекрасно работают в Chrome для Windows, Android и Mac, но не работает в Chrome для iOS и Safari для Mac и iOS. Насколько я могу судить, Safari просто не запускает событие с голосованием.
Усложняя вещи, у меня нет на самом деле каких-либо устройств Apple, поэтому мне пришлось понять это, попросив друзей попробовать что-то.
Есть ли что-то особенное в Safari, чтобы получить список голосов? Или API-интерфейс Speech Synthesis просто не реализован (полностью)?
Спасибо. Хотелось бы, чтобы это было где-то лучше документировано. : / – Asmor