强制浏览器嗅探Safari版本

时间:2015-04-01 09:06:52

标签: safari speech-synthesis

有人能告诉我检测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>

2 个答案:

答案 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次?