有人能告诉我检测Safari的“最佳”方式,然后是版本号吗?
看,我不想这样做,但我找不到办法在Safari上确定一个WORKING版本的speechSynthesis
请参阅下面的示例,该示例适用于iOS 7.1.2 IF ,您不添加onEnd侦听器。除此之外,一切都很好。
在我的真实世界中,它会谈论但仍然无法完成最后的活动。
在iOS 8上没有问题。
请提供最佳的代理/版本嗅探器或更好的工作特征检测器。
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function fini()
{
alert("end");
}
function talk()
{
if (!('speechSynthesis' in window)) {
alert("Unsupported browser");
return;
}
alert("Getting ready.");
var utterance = "Hello World";
var chat = new SpeechSynthesisUtterance(utterance);
chat.addEventListener('end', fini, false);
speechSynthesis.speak(chat);
}
</script>
</head>
<body>
<p>On Safari this example won't fire any known events<br />
onend, onerror, even onended: -</p>
<input type="button" value="Talk" onclick="talk()" />
<br /><br />
No probs on Chrome or Opera. Spewin!
</body>
</html>
答案 0 :(得分:0)
对于记录,addEventListener在7.2.1上抛出一个异常,可能会被捕获以表示不支持的语音合成。
答案 1 :(得分:0)
Opera mobile有喉炎
同一主题的不同问题: -
您(以及我)可能会质疑Opera中此行为的正确性,但它似乎就像我的Android手机上没有已知/已注册/可用的Opera Mobile声音一样简单: - (
&#34;为我唱歌Christine!唱我的天使,唱歌!&#34;抱歉,无法帮助它。
那么我要下载哪些文件?
在Safari上,显然,speechSynthesis.getVoices方法是同步的,这让生活变得轻松。在其他地方,它是异步的,并在第一次调用时返回长度为0的数组。
我们需要注册一个事件,例如: -
speechSynthesis.onvoiceschanged = function() {
voices = window.speechSynthesis.getVoices();
alert("Voices " + voices.length);
if (!done) theWork();
};
这在Opera Mobile上永远不会激发。好奇!
为什么我没有从合成规范中得到错误,例如&#34;语言不可用&#34;或&#34;语音不可用&#34;?
因为我没有明确指定语言和声音吗?
为什么Chrome提供的onvoices改变了3次?