SpeechRecognition 仅在 Chrome(89+、HTTPS/localhost)中可用,Firefox/Safari/Edge 已弃用或从未支持;替代方案为 WebRTC+第三方ASR 或录音文件上传后端转写。

SpeechRecognition API 在大多数现代浏览器中不可用,SpeechRecognition 不是稳定标准,Chrome 是唯一长期支持它的桌面浏览器,且仅限 HTTPS 环境;其他浏览器(Firefox、Safari、Edge)已弃用或从未实现。
为什么 SpeechRecognition 在 Firefox / Safari / Edge 中不工作
Firefox 从 2021 年起移除了对 SpeechRecognition 的支持;Safari 从未实现;Edge 自 Chromium 内核切换后短暂支持过,但新版已默认禁用该接口。调用 new SpeechRecognition() 会直接抛出 ReferenceError: SpeechRecognition is not defined。
- 检查方式:在控制台运行
typeof SpeechRecognition,返回"undefined"即代表不可用 - 即使检测到构造函数存在,也需确认页面是否通过 HTTPS 加载——HTTP 下 Chrome 会静默禁用
-
webkitSpeechRecognition是旧版 Chrome 的前缀版本,现已被统一为无前缀的SpeechRecognition,但行为一致
Chrome 中启用 SpeechRecognition 的必要条件
必须同时满足三项,缺一不可:
- 使用 Chrome 89+(推荐 110+)
- 页面部署在 HTTPS 协议下(
localhost也允许) - 用户已授予权限:首次调用
recognition.start()时会触发麦克风权限弹窗,拒绝后需手动在地址栏点击锁形图标重置权限
常见失败现象:onend 立即触发、onerror 返回 error: not-allowed 或 aborted,基本都指向权限或协议问题。
立即学习“前端免费学习笔记(深入)”;
基础可用代码示例(仅限 Chrome + HTTPS)
以下是最小可运行片段,含错误防护和状态反馈:
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 移出活跃标准草案。可行路径只有两条:
- 用 WebRTC + 第三方 ASR 服务(如 Azure Cognitive Services、阿里云智能语音交互、讯飞开放平台),自己采集音频流并上传识别
- 降级为按钮录音 + 文件上传 + 后端转写(
),绕过实时麦克风限制
真正容易被忽略的一点:很多开发者花半天调试 SpeechRecognition,却没意识到,只要页面不是 HTTPS,连 getUserMedia 都拿不到麦克风流——这是整个语音链路的前提,比 API 是否存在更底层。











