2015-04-01 117 views
0

有人能告诉我检测Safari及其版本号的“最佳”方法吗?强制浏览器嗅探Safari版本

你看,我并不想这样做,但我不能找到一种方法来牵制speechSynthesis的工作版本Safari上

请参见下面的iOS上7.1.2 工作,如果一个例子你不添加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

为了记录在案,使用addEventListener被扔在7.2.1异常可能被截留,以表示不支持语音合成。

0

的Opera Mobile患有喉炎

不同的问题同一个主题: -

你(和)可能会质疑这种行为在Opera的正确性,但它显示为不存在已知的那样简单/歌剧手机注册/可用的声音我的Android手机上:-(

“唱给我听恭!唱我的天使,哼!”对不起,不能帮助它。

所以是重新下载我要下载的任何文件?

在Safari上的FYI显然,speechSynthesis.getVoices方法是同步的,它使生活变得轻松。在其他地方它是异步的,并且会在第一次调用时返回一个长度为0的数组。

我们需要注册一个事件,如: -

speechSynthesis.onvoiceschanged = function() { 
    voices = window.speechSynthesis.getVoices(); 
    alert("Voices " + voices.length); 
    if (!done) theWork(); 
    }; 

这永远不会触发上的Opera Mobile。好奇!

为什么我没有从综合规范中得到错误,如“语言不可用”或“语音不可用”?

因为我没有明确指定语言和语音?

为什么Chrome将发票更换3次?