Chrome扩展程序-getUserMedia引发“ NotAllowedError:由于关机失败”

时间:2018-06-22 15:34:18

标签: javascript google-chrome google-chrome-extension getusermedia

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

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

在扔

NotAllowedError: Failed due to shutdown

我搜索后发现几乎没有任何东西可以解释这一点。有其他人遇到过这个问题吗,或者有人知道我能对此做什么吗?

3 个答案:

答案 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"]