场景:公众号模板消息跳转小程序,小程序内用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。
监听webview地址是否有变化