You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Chrome扩展中使用Web Speech API遇not-allowed错误,是否无法使用?

在Chrome扩展中使用Web Speech API的解决方案

嘿,别灰心!Chrome扩展完全支持Web Speech API,你碰到的not-allowed错误和普通网站的SSL限制没关系,问题出在扩展的权限配置上。下面一步步帮你解决:

1. 必须添加的权限配置

Web Speech API的语音识别需要访问麦克风,所以你得在manifest.json里声明audioCapture权限。根据你用的Manifest版本,配置方式如下:

Manifest V2 配置

{
  "manifest_version": 2,
  "name": "你的扩展名称",
  "version": "1.0",
  "permissions": [
    "audioCapture"
  ],
  // 其他扩展配置(比如popup、background等)
}

Manifest V3 配置

{
  "manifest_version": 3,
  "name": "你的扩展名称",
  "version": "1.0",
  "permissions": [
    "audioCapture"
  ],
  // 其他扩展配置
}

这个权限是让Chrome授权你的扩展访问麦克风的关键,没加的话肯定会触发not-allowed错误。

2. 注意代码的执行上下文

Web Speech API只能在安全上下文中运行,而Chrome扩展的内部页面(比如popup.htmloptions.html或者background脚本)使用的是chrome-extension://协议,这属于Chrome认可的安全上下文,完全不受普通网站的SSL限制。

但如果你是在content script里把代码注入到非HTTPS的外部网站,那确实会因为网站本身的安全限制触发错误——这种情况建议把语音识别的逻辑移到扩展自己的页面里。

3. 代码的小调整

你的代码里recognition.start(...)多了不必要的括号内容,应该改成recognition.start();。另外,建议加上错误监听,方便排查后续问题:

const recognition = new webkitSpeechRecognition();
recognition.lang = 'en-US';
recognition.interimResults = false;
recognition.maxAlternatives = 1;

recognition.onresult = event => {
  const result = event.results[0][0].transcript;
  console.log('识别结果:', result);
};

// 添加错误监听
recognition.onerror = event => {
  console.error('语音识别出错:', event.error);
};

recognition.start();

按照上面的步骤配置后,你的Chrome扩展就能正常使用Web Speech API啦!

内容的提问来源于stack exchange,提问作者Eliran Pe'er

火山引擎 最新活动