当前位置: 首页 > 知识库问答 >
问题:

Chrome扩展支持WebSpeech API吗?

林彬
2023-03-14

谷歌Chrome扩展支持Chrome的Web语音语音识别API吗?我已经包含了一些javascript来创建一个语音识别对象,但是当我启动我的扩展时,没有提示我进行麦克风访问。

这不是我的代码的问题。我在谷歌上搜索过,但是我找不到任何关于Chrome扩展是否支持Web语音API的信息。我只想要一个是/不是的答案。

注意:我相信WebSpeech API对本地文件不起作用。

共有2个答案

仲孙鸿畴
2023-03-14

Web语音API已经可以被Chrome扩展使用,甚至可以在后台页面和扩展按钮弹出窗口中使用。它工作的事实并不一定是一个预期的特性,而且我之前已经在这个关于如何使用webrtc insde google chrome Extension?的答案中解释了它是如何工作的以及为什么会工作。前面的解释是关于WebRTC的,但它同样适用于Web语音,可以使用如下:

>

  • 实例化WebKitSpeechRecognition实例并开始录制。
  • 如果检测到权限错误(事件触发onerror.error===“non-alloged'),请打开扩展页(chrome-extension://[ID]/yourpage.html)。可以在新窗口、选项卡或iframe中打开此扩展页。
  • 从此页请求访问麦克风。getUserMedia和SpeechRecognition都共享(持久)音频权限,因此要检测是否允许录制音频,可以使用getUserMedia请求该权限,而不激活语音识别。例如:

    navigator.webkitGetUserMedia({
        audio: true,
    }, function(stream) {
        stream.stop();
        // Now you know that you have audio permission. Do whatever you want...
    }, function() {
        // Aw. No permission (or no microphone available).
    });
    

  • 孟茂
    2023-03-14

    更新:基于Robw的答案,这个答案现在已经过时了,Web语音API现在可以在扩展内部使用了。(不幸的是,我不能删除这个答案,除非OP不接受。)

    答案还不是。通过chrome-extension:URL访问的页面无法访问任何媒体输入API,包括SpeechRecognitionGetUserMedia。任何使用API的尝试都将立即触发错误回调。

    我最初认为SpeechRecognition可以像geolocationAPI一样工作:扩展弹出窗口不能提示geolocation权限,但作为完整浏览器页面加载的Chrome-Extension:页面可以像普通页面一样提示权限。但是,媒体API的行为方式不是这样的;无论页面是弹出还是完整页面,它们都将失败。

    有一个错误报告可以修复此问题,并允许开发人员在清单中指定媒体访问权限。当这个bug修复后,扩展可以拥有一个manifest-set权限,授予它们自动麦克风/视频访问权限,因此无法提示权限将成为一个不存在的问题(因此,具有适当manifest权限的扩展将能够自由使用Speech API)。

     类似资料:
    • Electron 支持 Chrome 扩展API的子集, 主要是支持 DevTools 扩展和 Chromium-internal 扩展,但它同时也支持一些其他扩展能。 注意:Electron 不支持商店中的任意 Chrome 扩展,Electron 项目的目标不是与 Chrome 的扩展实现完全兼容。 加载扩展 Electron 只支持加载未打包的扩展 (即不能使用 .crx 文件)。 插件会被

    • 在过去的几周里,我一直在编写一些浏览器扩展,直到今天,我认为Firefox的WebExtension应该在Chrome中自动运行。所以我试着根据Mozilla的示例编写代码。 但是今天我意识到在Chrome扩展的API文档中没有提到承诺。 我在所有扩展的代码中都严格地使用了承诺。 所以现在我的问题是,我的代码能在Chrome中工作吗?或者,如果我在顶部添加一个声明,它会起作用吗? 或者,Chrom

    • 我可以创建一个插件或扩展的谷歌Chrome移动(Android谷歌Chrome)? 如果没有,我可以为谷歌Chrome(桌面)创建一个扩展,它将在谷歌Chrome栏中添加一个按钮。此按钮将在另一个web浏览器中打开页面(在我自己的web浏览器中),因此,此按钮应该启动我自己的web浏览器。

    • 包含 RTL 文件 如需启用 RTL 功能,则要包含 'easyui-rtl.css' 和 'easyui-rtl.js' 文件。 <link rel="stylesheet" type="text/css" href="themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="easyui-rtl.cs

    • 一个轻量级的缓存实现,目前已支持 Redis Memcache Memcached File 四种储存模式 仓库地址: Github 安装 composer require easyswoole/cache 注意: 请确保框架已经引入了 composer 的 autoload.php 文件,否则报类不存在的错误 快速入门 如果不做任何设置,默认使用File驱动,开箱即用 use easySwool

    • Tweetmeme Chrome 扩展其实就是一个精简版的 TweetMeme 按钮,其作用就是让你“随时随地”都可以向你的关注者分享你正在浏览的网页(“随时随地”加引号是因为在天朝该服务不可用),简单点说就是一个 retweet 按钮。通过 Tweetmeme Chrome 扩展分享出的网址会采用 retwt.me 短网址服务进行缩短,对于身在墙外或者随时都在翻墙状态的用户来说非常实用。 安装