Utk*_*nos 6 javascript google-chrome google-chrome-extension getusermedia
我有一个套件,可以记录用户的网络摄像头和麦克风。它在网页上效果很好,但在Chrome扩展程序中,该行如下:
navigator.mediaDevices.getUserMedia({video: true, audio: true})
.then(this.record.bind(this))
.catch(VidRA.error);
Run Code Online (Sandbox Code Playgroud)
扔
NotAllowedError: Failed due to shutdown
Run Code Online (Sandbox Code Playgroud)
我搜索后发现几乎没有任何东西可以解释这一点。有没有其他人遇到过这个问题,或者有人知道我能做些什么?
哇,这是雷区。
首先,这似乎是一个错误(感谢@wOxxOm)。
因此,我们需要围绕它进行编码。
由于后台脚本在请求媒体访问时会生成此错误,因此我们需要在其他位置请求它。如果尝试从弹出式JS生成相同的错误,那么将留下内容脚本。
然后,这些步骤是:
内容脚本请求访问媒体设备
成功后,内容脚本消息背景脚本
收到消息后,后台脚本请求访问媒体设备;由于内容脚本已经成功,因此后台脚本现在也将成功
至关重要的是,内容脚本必须在扩展程序的上下文中运行,而不是在当前网页(在活动选项卡中)中运行。这样一来,用户仅被询问一次权限,因为他们的决定会逐个域记住。在扩展程序(而不是当前网页)的上下文中运行脚本意味着始终在同一域(扩展域,即chrome://...
。)中询问权限(并记住决定)。
我的方法是拥有一个持久的内容脚本(在清单中的清单中指定content_scripts
),其工作是在打开扩展名时将iframe注入当前标签页中。
从扩展名将一个页面加载到该iframe中,我们称它为iframe.html
。
在该页面中,有JavaScript请求媒体访问。
ew ...
小智 5
乌特卡诺斯的回答很好,但不要忘记添加
frame.setAttribute("allow", "microphone; camera");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1277 次 |
最近记录: |