我正在尝试在 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/