speechSynthesis API不起作用

时间:2015-06-28 11:15:35

标签: javascript google-chrome text-to-speech speech-synthesis

我试图在http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html#m3to4-deprecations-core-aadm的帮助下尝试使用speechSynthesis API

Eric's blog工作正常,这意味着网站有This fiddle(如果我错了,请纠正我)。我做了no issue with the audio device permission但似乎没有工作(我的意思是它不是说 Hello world )。

这是我的代码:



function speak() {
    var msg = new SpeechSynthesisUtterance('Hello world');
    msg.rate = 0.7;
    msg.pitch = 1;
    window.speechSynthesis.speak(msg);
}

<button title="Click to listen" onclick="speak()">
         Say hello world
</button>
&#13;
&#13;
&#13;

更新own fiddle所指出的代码正在此处工作,但enhzflep

中没有

任何建议,善良的人?

1 个答案:

答案 0 :(得分:1)

嗯,你在这个页面上发布的片段对我来说很有用,但是包含相同代码的小提琴不适用。但是,如果您将第二个下拉菜单更改为"No wrap - in <head>",那么就可以了。

这是因为jsfiddle将您的代码包装到一个在加载文档时调用的函数,如下所示:

<script type="text/javascript">//<![CDATA[ 
window.onload=function(){
function speak() {
    var msg = new SpeechSynthesisUtterance('Hello world');
    msg.rate = 0.7;
    msg.pitch = 1;
    window.speechSynthesis.speak(msg);
}
}//]]>  
</script>

通过这样做,window.onload处理程序之外的代码(包括html中的内联JS)无法“看到”您的speak函数。

通过更改下拉列表,jsFiddle会为显示结果的iframe生成不同的JS,如下所示:

<script type="text/javascript">//<![CDATA[ 

function speak() {
    var msg = new SpeechSynthesisUtterance('Hello world');
    msg.rate = 0.7;
    msg.pitch = 1;
    window.speechSynthesis.speak(msg);
}
//]]>  

</script>