【问题描述】若在微信小程序页面中使用camera组件不加控制,会出现用户在该页面主动去修改小程序设置中“摄像头”权限但页面无法更新组件渲染状态的情况;
【已知条件】camera组件使用限制如下:
- 同一页面只能插入一个
camera组件; - 设置中显示的权限项,仅包含当前小程序“已使用过”的 scope。(如果页面 从未渲染
<camera>组件,也 从未调用wx.chooseMedia、wx.createCameraContext等相机相关 API, 那么微信认为“不需要相机权限”,就不会在设置页展示该选项。) <camera>组件在权限缺失时会渲染失败(白屏或不显示),且不会因权限后续变化而自动恢复。
【解决思路】利用onShow、onHide生命周期,加上v-if去创删组件
<camera
v-if="!hideCamera"
device-position="back"
flash="off"
></camera>
// hideCamera初始声明为false
// ...
onShow() {
// 关键:先创建一次上下文,触发权限注册
try {
wx.createCameraContext(); // 不报错,但会向微信声明“要用相机”
} catch (e) {
console.log("createCameraContext 调用(用于触发权限声明)");
}
this.hideCamera = false;
// ... wx.getSetting查询已有权限
},
onHide() {
this.hideCamera = true;
},