微信小程序体验版、线上版共用storage问题的解决方案。
问题根源
小程序体验版和线上版本共用一套storage,会出现在测试中,体验版的数据调用线上版的bug。
由于官方不做处理,所以自行写一个解决方法,代码比较简单。
解决
代码执行流程如下
- 当页面加载的时候,在 storage 中写入当前的环境(体验版、线上版)。
- 切换体验版 、线上版的时候,校验是否与 storage 一致。
- 如果不一致,则清除 storage 与 弹出对应的提示。
// app.js
const SYSTEM_INFO = wx.getAccountInfoSync()
const ENV_VERSION = SYSTEM_INFO.miniProgram.envVersion
App({
onLaunch() {
// 设置当前系统的环境
wx.getStorageSync('envVersion') || wx.setStorageSync('envVersion', ENV_VERSION)
},
onShow() {
// 检查当前环境是否冲突
if (ENV_VERSION && (wx.getStorageSync('envVersion') !== ENV_VERSION)) {
// 清除storage
wx.clearStorageSync()
wx.setStorageSync('envVersion', ENV_VERSION)
wx.showModal({ title: '提示', content: '您从体验版 / 线上版切换过来,请重启小程序继续访问。', showCancel: false })
return
}
}
})
注意事项
wx.getAccountInfoSync().miniProgram.envVersion 这个 api 是在 2.10.0 以上才会有。