You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web Speech语音转文本支持检测及前缀API含义技术咨询

Web Speech语音转文本功能的几个疑问

我正试图深入了解Web Speech语音转文本功能的实际可用性,过程中发现网上大量用于检测浏览器是否支持该功能的代码如下:

const NativeSpeechRecognition = typeof window !== 'undefined' && (
  window.SpeechRecognition ||
  window.webkitSpeechRecognition ||
  window.mozSpeechRecognition ||
  window.msSpeechRecognition ||
  window.oSpeechRecognition
)

根据浏览器兼容性数据,所有实际支持该功能的浏览器(Chrome、Opera、UC、三星浏览器、Safari、QQ浏览器、百度浏览器)均使用webkit前缀:window.webkitSpeechRecognition。但兼容性数据显示Edge(含109版本)不支持语音转文本,而我的Windows电脑上,Edge 109.0.1518.78在自己的JS网页应用(使用react-speech-recognition包)及在线语音听写工具中均可正常使用该功能。

我搜索oSpeechRecognition、mozSpeechRecognition、msSpeechRecognition未找到有效信息,于是运行了以下代码沙箱查看这些API是否已定义:

var recognition = new (window.SpeechRecognition ||
  window.webkitSpeechRecognition ||
  window.mozSpeechRecognition ||
  window.msSpeechRecognition)();
recognition.lang = "en-US";
recognition.interimResults = false;
recognition.maxAlternatives = 5;
recognition.start();

console.log("window.SpeechRecognition", window.SpeechRecognition);
console.log("window.webkitSpeechRecognition", window.webkitSpeechRecognition);
console.log("window.mozSpeechRecognition", window.mozSpeechRecognition);
console.log("window.msSpeechRecognition", window.msSpeechRecognition);

console.log("selected recognition", recognition);

recognition.onresult = function (event) {
  console.log("You said: ", event.results[0][0].transcript);
};

Chrome 109的控制台输出:

window.SpeechRecognition  undefined
window.webkitSpeechRecognition  ƒ SpeechRecognition() {}
window.mozSpeechRecognition  undefined
window.msSpeechRecognition  undefined
selected recognition  EventTarget {grammars: Object, lang: "en-US", continuous: false, interimResults: false, maxAlternatives: 5…}

Edge 109的控制台输出完全相同:

window.SpeechRecognition  undefined
window.webkitSpeechRecognition  ƒ SpeechRecognition() {}
window.mozSpeechRecognition  undefined
window.msSpeechRecognition  undefined
selected recognition  EventTarget {grammars: Object, lang: "en-US", continuous: false, interimResults: false, maxAlternatives: 5…}

Firefox 109中代码沙箱无法运行,报错:

TypeError: undefined is not a constructor $csb$eval /src/index.js:1:18
var recognition = new (window.SpeechRecognition ||

我希望了解以下问题:

  1. 为何兼容性数据显示Edge不支持语音转文本,但实际可用?
  2. 为何Firefox 109无法运行该代码?
  3. mozSpeechRecognition、msSpeechRecognition、oSpeechRecognition的起源和用途是什么?这类代码被大量复制但无注释说明,似乎是过时的历史代码却仍被广泛使用。

问题解答

  1. Edge显示不支持但实际可用的原因
    Edge从版本79开始基于Chromium内核开发,完全继承了Chrome对Web Speech API的支持,包括带webkit前缀的webkitSpeechRecognition。兼容性数据可能未及时更新,或者在标注时未明确区分旧版Edge(EdgeHTML内核)和新版Chromium Edge。旧版Edge确实不支持该API,但新版Chromium Edge和Chrome的支持情况完全一致,所以你的Edge 109能正常使用。

  2. Firefox 109无法运行的原因
    Firefox从未正式支持Web Speech API的语音转文本功能(SpeechRecognition),仅在早期有过实验性的实现计划,但最终没有落地。目前Firefox只支持Web Speech API的文本转语音部分(SpeechSynthesis),不支持语音转文本,因此代码中找不到任何可用的Recognition构造函数,导致报错。

  3. 带前缀的Recognition API的起源

  • mozSpeechRecognition:Mozilla早期为Firefox规划的实验性前缀API,但该功能从未正式发布,仅停留在内部测试阶段,最终被放弃,所以实际环境中找不到这个对象。
  • msSpeechRecognition:微软旧版Edge(EdgeHTML内核)曾计划支持该API,但同样没有正式推出,仅存在于早期的开发预览版中,正式版从未上线,因此现在也无法找到。
  • oSpeechRecognition:Opera早期基于Presto内核时,曾考虑过添加该API的支持,但后来Opera切换到Chromium内核,直接使用了webkit前缀的版本,这个前缀的API从未实际发布过。

这类带多前缀的检测代码是早期Web API发展阶段的遗留产物——当时各浏览器厂商习惯用私有前缀实现未标准化的API,开发者为了兼容不同浏览器会同时检测多个前缀。即使这些前缀的API从未正式上线或已被淘汰,代码仍被大量复制传播,至今还能在网上看到。


内容的提问来源于stack exchange,提问作者John Rizzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:05:20