我正在尝试在 speechSynthesis API 的帮助下使用 Eric's blog

This fiddle 工作正常,这意味着网站有 no issue with the audio device permission(如果我错了,请纠正我)。我做了我的 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 所指出的,但不在 JSFiddle's editor

有什么建议吗,好心人?

最佳答案

嗯,你在这个页面上发布的片段对我有用,但是包含相同代码的 fiddle 却没有。但是,如果您将第二个下拉列表更改为 "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>

关于javascript - 语音合成 API 不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31099157/

10-12 12:39
查看更多