新的隐私授权处理,进页面时需要定位就会触发 wx.onNeedPrivacyAuthorization,打开隐私授权弹窗。多次编译发现有时会无弹窗显示,但监测数据 isShow 是正常变动到 true 的。这是什么原因,该如何处理呢?
在组件的 attached、ready 生命周期和页面的 show 生命周期中进行 popUp(弹窗显示)、或者刚进页面就触发 wx.onNeedPrivacyAuthorization,都会出现 wx:if 设置为 true 但不显示的问题。
使用 weui中的半屏组件 mp-half-screen-dialog(看了源码逻辑也是用的wx:if)或者直接自己写样式使用 wx:if 均存在此问题。
推测可能是部分异步加载基础库/小程序底层内容在此时未完全加载完成导致?开始设置了最短 40ms 的 setTimeout 但仍然存在此问题,应该不是任务轮次导致。
以下为涉及到此问题的代码,已去除部分与此问题无关的逻辑。
js 部分:
data: {
isShow: false, // wx:if 绑定的字段
},
lifetimes: {
attached: function () {
const that = this
if (that.data._firstCheck) { // 传入属性,判断是否需要进页面时就确定授权情况
if (wx.canIUse('getPrivacySetting')) {
wx.getPrivacySetting({
success: (res) => {
if (res.needAuthorization) {
that.popUp()
}
}
})
}
}
},
},
pageLifetimes: {
show: function () {
const that = this
if (wx.canIUse('onNeedPrivacyAuthorization')) {
wx.onNeedPrivacyAuthorization(resolve => {
// 监听需授权事件,且仅处理最后一个被触发的需授权事件
that.data._privacyResolve = resolve
that.popUp()
})
}
},
},
methods: {
popUp() {
const that = this
if (that.data.isShow === false) {
that.setData({
isShow: true
})
}
}
}
})
wxml 部分:
<mp-half-screen-dialog show="{{isShow}}" maskClosable="{{false}}" title="隐私提示" maskClosable="{{false}}" closabled="{{false}}">
<view slot="desc">
<text>隐私提示信息</text>
</view>
<view slot="footer">
<button type="default">不同意</button>
<button id="agree-btn" type="primary" open-type="agreePrivacyAuthorization">同意</button>
</view>
</mp-half-screen-dialog>
调试一下wxml啊
定位是在load吗,可能是load和show是异步执行的,应该确保调用定位前已经监听了wx.onNeedPrivacyAuthorization
分享出能复现的代码片段,试过才好查问题。