公众号模板消息跳转小程序时传参有时会导致 webview 绑定的数据更新错误
场景:公众号模板消息跳转小程序,小程序内用webview 显示订单页。 bug重现步骤: 点击公众号001 订单消息,此时小程序正常。点击公众号002 订单消息,此时小程序正常。再次点击公众号002 订单消息,此时小程序 webview 的订单显示是 001而不是002。 index.wxml 页面显示订单。其中 mainUrl 为订单页面url,点击公众号消息时将动态更新。 <view class="page-body">
<view class="page-section page-section-gap">
<web-view src="{{mainUrl}}"></web-view>
</view>
</view>
模板消息传参oid pagepath=pages/index/index?oid=001
app.js 监听 onShow 获取 oid App({
onShow: function(options){
let q = encodeURIComponent(toParam(options.query));//toParam() 将返回 oid=001
if (q){
this.globalData.showQuery = q;
}
},
});
index.js 在onLoad 中更新 mainUrl const gData = getApp().globalData;
var lastShowQuery = gData.showQuery;//缓存上次更新的showQuery
Page({
onLoad: function () {
if (gData.showQuery){
if (gData.showQuery != lastShowQuery){//如果 showQuery 变化才更新 mainUrl
lastShowQuery = gData.showQuery;
this.setData({ mainUrl: "myorder.do?" + gData.showQuery});
}
}
}
})
补充说明:再次点击公众号 002 订单消息时,showQuery 为 oid=002;由于上一步已将 app.globalData.showQuery 更新为oid=002,所以不再调用 setData() 更新页面index.wxml, 但 index.wxml 此时显示的mainUrl (后台服务器打印显示)不是 002 而是 001。