收藏
回答

公众号模板消息跳转小程序时传参有时会导致 webview 绑定的数据更新错误

场景:公众号模板消息跳转小程序,小程序内用webview 显示订单页。

bug重现步骤:

  1. 点击公众号001 订单消息,此时小程序正常。
  2. 点击公众号002 订单消息,此时小程序正常。
  3. 再次点击公众号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

最后一次编辑于  2020-04-27
回答关注问题邀请回答
收藏

1 个回答

  • 七分
    七分
    2020-04-27

    监听webview地址是否有变化

    2020-04-27
    有用
    回复 12
    • 欢乐马
      欢乐马
      2020-04-27
      谢先。 按理第2步已将 mainUrl 设为 002了,且 webview 也已更新为 002,但再进行第3步的时候,竟然切换001了。
      2020-04-27
      回复
    • 欢乐马
      欢乐马
      2020-04-27
      用开发工具的条件编译,建2个条件,则无法重现此bug。
      2020-04-27
      回复
    • 七分
      七分
      2020-04-27回复欢乐马
      如果每次都setData更新mainUrl都成功的话,建议不需要判断是否跟上一次是否相同每次都更新地址
      2020-04-27
      回复
    • 欢乐马
      欢乐马
      2020-04-27
      已经这么干了。只是想搞懂bug的原因
      2020-04-27
      回复
    • 七分
      七分
      2020-04-27回复欢乐马
      监听webview地址.第3步的时候地址有没有变化
      2020-04-27
      回复
    查看更多(7)
登录 后发表内容
问题标签