Facebook安卓WebView文件输入无法调用相机:原因及解决方法
嘿,我来帮你梳理这个问题~
这是Bug还是有意设置?
先给你明确答案:这不是Bug,而是Facebook安卓版WebView的有意限制。
很多主流社交平台(包括Facebook)都会对自家的WebView做大量自定义配置,一方面是为了统一用户在App内的浏览体验,另一方面也是出于隐私和安全考虑——避免第三方网页随意调用系统敏感权限(比如相机),防止用户被恶意网页诱导授权。所以他们会屏蔽掉原生input[type="file"]的相机调用选项,只保留相册、云端存储等相对安全的来源。
有没有办法在Facebook安卓WebView中调用相机?
有几种方案可以尝试,优先级从高到低:
优先使用Facebook官方JavaScript SDK
这是最靠谱的方式。Facebook提供了专门的图片上传API(比如FB.ui的上传对话框),调用这个API可以在WebView内唤起平台原生的图片选择器,支持直接调用相机或从相册选择。因为这是官方认可的能力,不会被WebView限制。尝试添加
capture属性
你可以给input标签加上capture属性试试,比如:<input accept="image/*" type="file" capture="user"> <!-- 前置相机 --> <!-- 或者 --> <input accept="image/*" type="file" capture="environment"> <!-- 后置相机 -->不过要提前打个预防针:这个属性在Facebook安卓WebView里大概率不生效,因为他们的WebView内核已经屏蔽了这个触发逻辑,但不妨一试。
引导用户间接操作
如果上面的方法都不行,只能退而求其次:提示用户先使用手机原生相机拍照保存到相册,再通过文件输入控件从相册选择图片。这种方式体验差一些,但至少能满足需求。引导用户在浏览器中打开页面
可以在页面中添加提示,告诉用户如果需要调用相机功能,可以点击页面右上角的“在浏览器中打开”选项,这样就能脱离Facebook的WebView限制,正常使用原生的文件输入控件能力了。
内容的提问来源于stack exchange,提问作者Carlos Alves Jorge

