我有一个套件,可以记录用户的网络摄像头和麦克风。它在网页上效果很好,但在Chrome扩展程序中,该行如下:
navigator.mediaDevices.getUserMedia({video: true, audio: true})
.then(this.record.bind(this))
.catch(VidRA.error);
在扔
NotAllowedError: Failed due to shutdown
我搜索后发现几乎没有任何东西可以解释这一点。有其他人遇到过这个问题吗,或者有人知道我能对此做什么吗?
答案 0 :(得分:3)
哇,这是个雷区。
首先,看来这是a bug(感谢@wOxxOm)。
所以我们需要对其进行编码。
由于后台脚本在请求媒体访问时会生成此错误,因此我们需要在其他位置请求它。如果您尝试从弹出式JS生成相同的错误,那么将导致content scripts。
步骤如下:
内容脚本请求访问媒体设备
成功后,内容脚本消息背景脚本
接收到消息后,后台脚本请求访问媒体设备;由于内容脚本已经成功,因此后台脚本现在也将成功
至关重要的是,内容脚本必须在扩展程序的上下文中运行,而不是当前网页(在活动选项卡中)。
我的方法是拥有一个持久的内容脚本(在content_scripts
下的清单中指定),其工作是在打开扩展名时将iframe注入当前标签页中。
从扩展名中向该iframe加载页面,我们称其为iframe.html
。
在该页面中,有JavaScript请求媒体访问。
Ph ...
答案 1 :(得分:3)
Utkanos的答案很好,但不要忘记添加
frame.setAttribute("allow", "microphone; camera");
答案 2 :(得分:0)
将它包含在 manifesto.json 中为我解决了这个问题。
"web_accessible_resources": ["background.js"]