gpt4 book ai didi

javascript - Chrome 扩展 - getUserMedia 抛出 "NotAllowedError: Failed due to shutdown"

转载 作者:搜寻专家 更新时间:2023-11-01 04:07:59 25 4
gpt4 key购买 nike

我有一个套件可以记录用户的网络摄像头和麦克风。它在网页上运行良好,但在 Chrome 扩展程序中:

navigator.mediaDevices.getUserMedia({video: true, audio: true})
.then(this.record.bind(this))
.catch(VidRA.error);

正在 throw

NotAllowedError: Failed due to shutdown

我搜索了一下,几乎找不到任何可以解释这一点的东西。有其他人遇到过这个问题吗?或者有人知道我能做些什么吗?

最佳答案

哇,这是雷区。

首先,这似乎是a bug (谢谢,@wOxxOm)。

所以我们需要围绕它进行编码。

由于后台脚本在请求媒体访问时会产生这个bug,所以我们需要在别处请求。如果您从弹出式 JS 尝试,则会生成相同的错误,因此留下 content scripts .

那么,步骤是:

  • 内容脚本请求访问媒体设备

  • 成功后,内容脚本通知后台脚本

  • 收到消息后,后台脚本请求访问媒体设备;由于内容脚本已经成功,后台脚本现在也将成功

至关重要的是,内容脚本必须在扩展程序的上下文中运行,而不是当前网页(在事件选项卡中)。也就是说,内容脚本必须通过以 chrome://,由 chrome.runtime.getURL() 生成。

这样一来,用户只会被请求一次权限,因为他们的决定会在逐个域的基础上被记住。在扩展的上下文中运行脚本,而不是当前网页,这意味着总是在相同的基于扩展的域中请求权限(并记住决定),而不是为访问的每个网站域再次请求。

我的方法是拥有一个持久的内容脚本(在 content_scripts 下的 list 中指定),其工作是在打开扩展程序时将 iframe 注入(inject)当前选项卡的页面。

从扩展中加载一个页面到 iframe 中,我们称之为 iframe.html,它最终负责请求访问。

呼...

关于javascript - Chrome 扩展 - getUserMedia 抛出 "NotAllowedError: Failed due to shutdown",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50991321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com