如何在Chrome Extension弹出窗口中提供webkitGetUserMedia权限?

时间:2012-10-25 19:58:38

标签: google-chrome-extension webrtc

我已成功使用webkitGetUserMedia从普通网页上的网络摄像头捕获视频,但当我尝试在我的Chrome扩展程序的popup.html中执行此操作时,没有任何反应。我没有得到任何权限错误,它似乎从来没有问过(inforbar永远不会在弹出窗口中向下滑动)。有没有办法解决?它看起来不像我可以在清单json中提供权限。

4 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:6)

Chrome扩展程序和WebRTC:

Chrome Extensions Manifest Permissions Documentation未提及清单中所需的两个权限,“videoCapture”和“audioCapture”,因此我不确定Chrome扩展程序是否可以使用该功能,您应该尝试看看在继续下去之前会发生什么! ;)

Chrome打包应用和WebRTC:

但是,在Chrome Packaged应用中,无论是沙盒还是非沙盒页面都可以实现! Chrome打包应用程序与扩展程序非常相似,因此根据您的操作,您可能需要构建应用程序。

Packaged Apps Manifest Permissions Documentation中,未明确列出“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);
                });

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

答案 2 :(得分:1)

根据@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访问音频/视频

答案 3 :(得分:0)

要求navigator.webkitGetUserMedia中的options.js有效但您必须在新选项卡中打开option.html弹出窗口,否则您将收到错误,因此manifest.json必须写入< / p>

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