我已经成功使用webkitGetUserMedia从普通网页上的网络摄像头捕捉视频,但是当我尝试在Chrome扩展程序的popup.html中执行此操作时,没有任何反应。我没有收到任何权限错误,它似乎从来没有问过(inforbar从不在弹出窗口中滑落)。有没有办法解决?它看起来不像我可以在清单json中授予权限。如何在Chrome扩展程序弹出窗口中提供webkitGetUserMedia权限?
回答
Chrome扩展和的WebRTC:
的Chrome Extensions Manifest Permissions Documentation没有提到在清单中,“videoCapture”和“audioCapture”所需的两个权限,所以我不知道这功能可用Chrome浏览器扩展与否,你应该尝试看看会发生什么,然后再继续! ;)
Chrome封装应用和的WebRTC:
然而,在Chrome打包应用程序,这是可能的,无论是在沙盒和非沙盒页! 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);
});
我测试了它,我能够捕捉到我的视频在弹出。
感谢您的详细信息!不幸的是,它不适用于扩展名: “尝试安装此扩展程序时出现警告: ”视频捕捉“仅适用于打包的应用程序,并且这是一个扩展。 我有一个问题正在追踪铬,所以希望他们能早日完成整理。 – anonymouse
打包应用程序和扩展程序没有太大区别。您可能会试图创建一个页面操作或浏览器操作,但是作为一个打包的应用程序。我可能是错的,但我认为你想在扩展中做的所有事情都可以通过打包的应用程序API获得。他们甚至以同样的方式安装扩展程序... – jmort253
我会研究它,谢谢。 – anonymouse
这是一个便宜的黑客攻击,但是如果你为你的扩展创建了一个选项页面,并且在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');
});
然后你仍然可以访问音频/视频从窗口。HTML或任何其他的WebView
问计navigator.webkitGetUserMedia
在options.js
的作品,但你必须在新标签中打开option.html
弹出,否则你会得到一个错误,以便在manifest.json
你必须写
"options_ui": {
"page": "options.html",
"chrome_style": true,
"open_in_tab": true
}
- 1. 如何打开扩展程序弹出窗口打开Chrome?
- 2. Chrome扩展中的弹出窗口?
- 3. 无法通过Chrome扩展程序弹出窗口创建JS弹出窗口
- 4. 如何限制Google Chrome扩展程序弹出窗口的大小?
- 5. Chrome扩展程序在打开弹出窗口时损坏
- 6. 使Chrome扩展弹出窗口透明
- 7. Chrome扩展 - 更改弹出窗口
- 8. 如何在Chrome扩展中制作全屏HTML弹出窗口?
- 9. 如何在Chrome的扩展程序弹出窗口中加载新文档?
- 10. 如何在Chrome扩展程序弹出窗口中使演讲webkit工作?
- 11. 如何从后台线程启动Chrome扩展弹出窗口?
- 12. Chrome扩展程序:iframe和弹出窗口之间的通信
- 13. Chrome扩展程序:检测弹出窗口关闭
- 14. Chrome扩展程序:将变量传递给弹出窗口
- 15. Google Chrome扩展程序创建的关闭弹出窗口
- 16. Chrome扩展程序:打开新弹出窗口
- 17. Chrome扩展程序 - 从弹出窗口执行简单的JavaScript
- 18. Chrome扩展程序弹出式窗口打开事件
- 19. 如何在安装Chrome扩展程序时显示弹出窗口
- 20. 如何在显示Chrome扩展程序弹出窗口后触发事件?
- 21. 将远程URL显示为Chrome扩展中的弹出窗口
- 22. 升级Chrome扩展程序的权限
- 23. bookmarkManagerPermission对Chrome扩展程序的权限
- 24. Chrome扩展程序 - 要求新权限
- 25. Facebook登录Chrome扩展程序,权限
- 26. 弹出权限窗口Facebook
- 27. Facebook权限弹出窗口
- 28. 如何在窗口中提供特定进程权限
- 29. (Chrome扩展程序)如何务实地从background.html打开弹出窗口
- 30. 如何阻止亚马逊上的Chrome扩展程序弹出窗口
嘿,你可以发布您的manifest.json文件和popup.html中的代码。我相信这是有效的,但我需要看看你想要帮助什么。我试图从背景页面做同样的事情,但我可以从弹出窗口中完成。 – jmort253