最近项目需求有扫码功能,我是用的是 vue2 组件 vue-qrcode-reader ,部署地址不是 https 的话无法调取系统摄像头进行扫码。
想知道这个的原理是什么,以及有办法可以绕过这个限制或有其他不需要 https 也可以调用摄像头的组件吗?麻烦大佬们赐教,谢谢。
1
Oktfolio 2022-03-15 09:28:47 +08:00
Chrome 的限制呗
|
2
P090mkVm22352Q8t 2022-03-15 09:34:03 +08:00
之前也做过这个摄像头功能,好像通过 nginx 配置 443 能给你前端地址强制转为 https
|
3
yin1999 2022-03-15 09:45:15 +08:00 1
仅 https 可以调用,不过 localhost 用 http 应该也能调用( debug 用)。MDN Ref: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia
|
4
musi 2022-03-15 10:10:59 +08:00
浏览器限制,如果想绕过那只能自己开发 app 了,然后在 app 里写好调用摄像头的 api 再开给 js 访问
|
5
libook 2022-03-15 10:15:09 +08:00
部属个 Nginx 用 Let's Encrypt 发个证书。
强制 HTTPS 主要是安全方面考虑,因为 HTTP 可能被中间人注入代码来开启摄像头。 |
6
otakustay 2022-03-15 10:24:15 +08:00
基本上近几年新的 API 都是仅 HTTPS 可用的
|
7
leisure 2022-03-15 10:28:19 +08:00
找个厂商申请个免费证书就好了,安全限制
|
8
geekvcn 2022-03-15 10:39:54 +08:00 via Android
确实是这样的,不然 http 随便一劫持,摄像头不是随便看
|
9
iqoo 2022-03-15 11:22:12 +08:00 2
这年头不是 https 的网站都懒得打开
|
10
Chism 2022-03-15 12:29:45 +08:00 via Android
还有一种方法是 input 文件,限定为 image ,并且只能调用相机,这样貌似就可以不用 https ,前端读取 input 的文件也可以直接二维码识别
|
11
DOLLOR 2022-03-15 13:55:53 +08:00
摄像头、屏幕分享、传感器这些对隐私安全要求相对高,只能在 HTTPS 下使用。
|
12
murmur 2022-03-15 13:57:24 +08:00
chrome 连 geolocation 都要 https ,就这玩意给我们坑的不轻,cordova 的应用都是本地文件哪里来的 https ,搞得有一段时间安卓某些个版本就没法定位
|
13
ysc3839 2022-03-15 14:55:08 +08:00 1
@murmur Cordova 这种调 WebView 的可以直接模拟一个 https 环境出来,甚至可以关闭安全机制,并没有什么问题
|