2015-04-01 154 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次?