Google chrome extension 如何在Chrome扩展弹出窗口中授予webkitGetUserMedia权限?

Google chrome extension 如何在Chrome扩展弹出窗口中授予webkitGetUserMedia权限?,google-chrome-extension,webrtc,Google Chrome Extension,Webrtc,我已经成功地使用webkitGetUserMedia在普通网页上从我的网络摄像头捕获视频,但当我尝试在我的Chrome扩展的popup.html中执行此操作时,什么都没有发生。我没有得到任何权限错误,只是它似乎从来没有问过(inforbar从来不会在弹出窗口中向下滑动)。这有什么办法吗?看起来我无法在清单json中授予权限。Chrome扩展和WebRTC: 声明中没有提到清单中需要的两个权限,“videoCapture”和“audioCapture”,因此我不确定Chrome扩展是否可以使用该功

我已经成功地使用webkitGetUserMedia在普通网页上从我的网络摄像头捕获视频,但当我尝试在我的Chrome扩展的popup.html中执行此操作时,什么都没有发生。我没有得到任何权限错误,只是它似乎从来没有问过(inforbar从来不会在弹出窗口中向下滑动)。这有什么办法吗?看起来我无法在清单json中授予权限。

Chrome扩展和WebRTC:

声明中没有提到清单中需要的两个权限,“videoCapture”和“audioCapture”,因此我不确定Chrome扩展是否可以使用该功能,在继续之前,您应该尝试看看会发生什么!;)

Chrome打包应用程序和WebRTC:

然而,在Chrome打包的应用程序中,无论是沙盒页面还是非沙盒页面,这都是可能的!Chrome打包的应用程序与扩展程序非常相似,因此根据您所做的工作,您可能希望构建一个应用程序

在中,没有明确列出“videoCapture”和“audioCapture”权限,但在示例中演示了一个

我有一个打包的应用程序,它使用沙盒HTML页面来运行webkitGetUserMedia,效果非常好。以下是您在舱单中需要的内容:

{
  "name": "app name",
  "version": "0.2",
  "manifest_version": 2,
  "minimum_chrome_version": "21",
  "app": {
    "background": {
      "scripts": ["main.js"]
    }
  },
  "icons": {
    /* "128": "icon_128.png" */
  },
  "sandbox": {
    "pages": ["call.htm" ]
  },
  "permissions" : [ "videoCapture", "audioCapture" ]
}
然后,您需要从chrome://newtab 页面作为应用程序。main.js应该包含如下内容:

// Chrome v24+
chrome.app.runtime.onLaunched.addListener(function() {
    chrome.app.window.create('mainpage.html',
        {width: 1190, height: 709});
});
主页应该是你的弹出窗口。在我的设置中,mainpage.html中有一个名为call.htm的iframe,iframe页面是沙盒式的,因此它可以执行一些不安全的操作,这些操作只能作为普通网页来完成。但是,如果在非沙盒弹出窗口中运行getUserMedia命令,则会从对webkitGetUserMedia的调用中获取MediaStream对象:

 navigator.webkitGetUserMedia({ audio: true, video: true },
                function (stream) {
                    mediaStream = stream;
                },
                function (error) {
                    console.error("Error trying to get the stream:: " + error.message);
                });

我对它进行了测试,并能够在弹出窗口中捕获我的视频。

这是一个廉价的黑客攻击,但如果您为扩展创建一个选项页面,并在JS中为其包含对
webkitGetUserMedia
的调用,它将请求对该扩展的所有URI的权限,用户在“选项”页面中允许后,后台页面也将有权使用它。

正如@tsbarnes所建议的,存在一种黑客行为,但对于Chrome应用程序,黑客行为不同,您可以从
background.js
调用navigator.webkitGetUserMedia,例如:

navigator.webkitGetUserMedia({audio: true, video: true}, function() {
    console.log('ok');
}, function(e) {
    console.log('webcam not ok');
});

然后您仍然可以从window.html或任何其他webview访问音频/视频,询问
navigator.js中的webkitGetUserMedia
,但必须在新选项卡中打开
option.html
弹出窗口,否则您将在
manifest.json
中获得错误,因此您必须编写

"options_ui": {
    "page": "options.html",
    "chrome_style": true,
    "open_in_tab": true
  }

嘿,你能发布你的manifest.json文件和popup.html中的代码吗。我相信这是可行的,但我需要看看你想做什么来帮助我。我正试图从一个背景页面做同样的事情,但我可以从弹出窗口做。谢谢你的详细信息!不幸的是,它不适用于扩展:“尝试安装此扩展时出现警告:“videoCapture”仅允许用于打包应用,而这是一个扩展。”我在chromium上发现了一个问题,所以希望他们能尽快解决这个问题。打包应用和扩展之间并没有太大区别。您可能会考虑尝试创建页面操作或浏览器操作,但将其作为打包的应用程序。我可能错了,但我认为您希望在扩展中执行的所有操作都可以通过打包的应用程序api来实现。他们甚至以同样的方式安装扩展…以下是扩展权限的相关错误:注意:截至(至少)2014年2月17日,getUserMedia音频/视频录制不再需要实验权限!胡萨!成功创建了这个不安全的打包应用程序区域并播放了麦克风:)这对我来说很有效,因为我已经搜索了好几天的解决方案!巴恩斯岩石!作品但是您需要让用户访问选项页面您应该如何准确地调用webkitGetUserMedia?那么接下来的通话又允许什么呢?理想情况下,您能给出示例代码吗@gregoiregentilIs这在2014年和2018年仍有意义吗