页面onload事件中Speech synthesis无法正常工作,该如何解决?
问题原因及解决方法
你的代码核心问题是错误地将函数执行结果赋值给了onload事件,而非绑定事件处理函数本身。
原代码中:
body.onload = speechInterface('Hello sir i am jarvis');
这行代码会立刻执行speechInterface函数,把它的返回值(此处为undefined)赋值给body.onload,页面加载完成时不会触发任何语音合成操作。
修正方案
方案1:用匿名函数包裹
把函数调用放在匿名函数内,确保页面加载完成时才执行语音合成:
var body = document.body; body.onload = function() { speechInterface('Hello sir i am jarvis'); }; function speechInterface(msg){ let talkback = new SpeechSynthesisUtterance(msg); window.speechSynthesis.speak(talkback); }
方案2:用bind绑定参数
如果需要更灵活地传递参数,可通过bind方法创建绑定好参数的函数:
var body = document.body; body.onload = speechInterface.bind(null, 'Hello sir i am jarvis'); function speechInterface(msg){ let talkback = new SpeechSynthesisUtterance(msg); window.speechSynthesis.speak(talkback); }
额外注意:部分浏览器对语音合成有交互限制,要求必须由用户主动操作(点击、触摸等)触发才能运行。如果本地测试仍无效,可以先添加一个按钮,通过点击按钮触发语音合成,确认功能本身是否正常。
内容的提问来源于stack exchange,提问作者SUMIT MANN
相关产品推荐
相关产品推荐

