web-app 的形式只有 https 地址可以调用手机摄像头?

2022-03-15 09:25:59 +08:00
 Gaays

最近项目需求有扫码功能,我是用的是 vue2 组件 vue-qrcode-reader ,部署地址不是 https 的话无法调取系统摄像头进行扫码。

想知道这个的原理是什么,以及有办法可以绕过这个限制或有其他不需要 https 也可以调用摄像头的组件吗?麻烦大佬们赐教,谢谢。

2668 次点击
所在节点    JavaScript
14 条回复
Oktfolio
2022-03-15 09:28:47 +08:00
Chrome 的限制呗
2c2b2u
2022-03-15 09:34:03 +08:00
之前也做过这个摄像头功能,好像通过 nginx 配置 443 能给你前端地址强制转为 https
yin1999
2022-03-15 09:45:15 +08:00
仅 https 可以调用,不过 localhost 用 http 应该也能调用( debug 用)。MDN Ref: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia
musi
2022-03-15 10:10:59 +08:00
浏览器限制,如果想绕过那只能自己开发 app 了,然后在 app 里写好调用摄像头的 api 再开给 js 访问
libook
2022-03-15 10:15:09 +08:00
部属个 Nginx 用 Let's Encrypt 发个证书。

强制 HTTPS 主要是安全方面考虑,因为 HTTP 可能被中间人注入代码来开启摄像头。
otakustay
2022-03-15 10:24:15 +08:00
基本上近几年新的 API 都是仅 HTTPS 可用的
leisure
2022-03-15 10:28:19 +08:00
找个厂商申请个免费证书就好了,安全限制
geekvcn
2022-03-15 10:39:54 +08:00
确实是这样的,不然 http 随便一劫持,摄像头不是随便看
iqoo
2022-03-15 11:22:12 +08:00
这年头不是 https 的网站都懒得打开
Chism
2022-03-15 12:29:45 +08:00
还有一种方法是 input 文件,限定为 image ,并且只能调用相机,这样貌似就可以不用 https ,前端读取 input 的文件也可以直接二维码识别
DOLLOR
2022-03-15 13:55:53 +08:00
摄像头、屏幕分享、传感器这些对隐私安全要求相对高,只能在 HTTPS 下使用。
murmur
2022-03-15 13:57:24 +08:00
chrome 连 geolocation 都要 https ,就这玩意给我们坑的不轻,cordova 的应用都是本地文件哪里来的 https ,搞得有一段时间安卓某些个版本就没法定位
ysc3839
2022-03-15 14:55:08 +08:00
@murmur Cordova 这种调 WebView 的可以直接模拟一个 https 环境出来,甚至可以关闭安全机制,并没有什么问题
jeesk
2022-12-06 17:12:06 +08:00
@murmur 你说的是 chrome 还是 webview 呀?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/840383

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX