speechSynthesis API 不工作

speechSynthesis API not working

我正在尝试 speechSynthesis API with the help of Eric's blog

This fiddle is working fine, meaning there is no issue with the audio device permission for website (correct me if I'm wrong). I made my own fiddle 但似乎没有用(我的意思是它不是在说 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>

更新: 正如 enhzflep but not in JSFiddle's editor

所指出的,代码在这里工作

有什么建议吗,好心人?

Hmmm.Well,您在此页面上发布的代码片段适用于我,但包含相同代码的 fiddle 无效。但是,如果您将第 2 个下拉菜单更改为 "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 不能 'see' 您的 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>