JavaScript 浏览器语音识别依赖 Web Speech API 的 SpeechRecognition 接口,需兼容处理前缀、设置 lang/interimResults/continuous 等参数,通过 onresult/onerror 等事件获取结果与错误,并在用户手势中调用 start() 以触发麦克风权限。

用 JavaScript 在浏览器里做语音识别,核心就是 Web Speech API 的 SpeechRecognition 接口。它不用装插件、不依赖后端服务,开箱即用——但得在支持的浏览器里(Chrome、Edge、Firefox 部分版本、Safari 14+),且必须由用户主动触发(比如点击按钮)才能获取麦克风权限。
检查兼容性并创建识别器
不同浏览器前缀不同,得先做兼容处理:
- 用
'SpeechRecognition' in window || 'webkitSpeechRecognition' in window判断是否支持 - 取构造函数:
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; - 再实例化:
const recognition = new SpeechRecognition();
配置关键参数
识别效果和体验直接受这几个设置影响:
-
recognition.lang = 'zh-CN':强制设为中文,避免自动识别成英文 -
recognition.interimResults = true:开启中间结果,说话时就能看到实时文字(适合搜索、字幕类场景) -
recognition.continuous = false:默认单次识别;设为true可持续监听,但需手动调用recognition.stop()结束,否则可能卡住或耗资源 -
recognition.maxAlternatives = 3:最多返回 3 个候选结果,兼顾准确性和响应速度
处理识别结果和错误
靠事件监听来拿文本和应对异常:
立即学习“Java免费学习笔记(深入)”;
-
onresult:每次有结果就触发,event.results是类数组,最后一项是最新结果,result[0].transcript是识别出的文字,result[0].confidence是置信度(0–1) -
onerror:重点捕获'not-allowed'(用户拒授权限)、'no-speech'(没说话)、'aborted'(被主动中断)这几类常见错误 -
onstart和onend可用于 UI 状态提示,比如显示“正在听…”或“已停止”
启动与权限控制
必须在用户手势(如 click、touchend)中调用 recognition.start(),否则会被浏览器拦截:
- 页面加载后不能自动启动,得等按钮点击
- 首次调用会弹权限框,用户点“允许”后才真正开始采集音频
- 建议加 loading 状态或禁用按钮,防止重复点击导致多次 start
- 识别结束后记得调用
recognition.stop()或recognition.abort()释放资源


















