SpeechRecognition 仅在 Chrome(89+、HTTPS/localhost)中可用,Firefox/Safari/Edge 已弃用或从未支持;替代方案为 WebRTC+第三方ASR 或录音文件上传后端转写。
SpeechRecognition API 在大多数现代浏览器中不可用,SpeechRecognition 不是稳定标准,Chrome 是唯一长期支持它的桌面浏览器,且仅限 HTTPS 环境;其他浏览器(Firefox、Safari、Edge)已弃用或从未实现。
SpeechRecognition 在 Firefox / Safari / Edge 中不工作Firefox 从 2025 年起移除了对 SpeechRecognition 的支持;Safari 从未实现;Edge 自 Chromium 内核切换后短暂支持过,但新版已默认禁用该接口。调用 new SpeechRecognition() 会直接抛出 ReferenceError: SpeechRecognition is not defined。
typeof SpeechRecognition,返回 "undefined" 即代表不可用webkitSpeechRecognition 是旧版 Chrome 的前缀版本,现已被统一为无前缀的 SpeechRecognition,但行为一致SpeechRecognition 的必要条件必须同时满足三项,缺一不可:
localhost 也允许)recognition.start() 时会触发麦克风权限弹窗,拒绝后需手动在地址栏点击锁形图标重置权限常见失败现象:onend 立即触发、onerror 返回 error: not-allowed 或 aborted,基本都指向权限或协议问题。
立即学习“前端免费学习笔记(深入)”;
以下是最小可运行片段,含错误防护和状态反馈:
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
if (!SpeechRecognition) {
console.error('SpeechRecognition not supported');
} else {
const recognition = new SpeechRecognition();
recognition.continuous = false; // 单次识别,避免自动重听
recognition.interimResults = false; // 不返回中间结果,减少噪声
recognition.lang = 'zh-CN'; // 显式指定中文,否则可能识别为英文
recognition.onresult = (event) => {
const transcript = event.results[0][0].transcript;
console.log('识别结果:', transcript);
};
recognition.onerror = (event) => {
console.error('语音识别错误:', event.error);
};
recognition.start(); // 触发权限请求
}
想跨浏览器获取语音转文本,不要押注 SpeechRecognition —— 它不是“暂时没支持”,而是已被 W3C 移出活跃标准草案。可行路径只有两条:
文件上传 + 后端转写(),绕过实时麦克风限制真正容易被忽略的一点:很多开发者花半天调试 SpeechRecognition,却没意识到,只要页面不是 HTTPS,连 getUserMedia 都拿不到麦克风流——这是整个语音链路的前提,比 API 是否存在更底层。