微信小程序中web-view中的src值改变后页面需要退两次的问题

参考链接:https://www.cnblogs.com/fenqi/p/11361118.html

web-view既然是第二次刷新产生的,那么让只刷新第一次是不是就可以解决了,于是做了如下尝试:

在B页面把A页面的web-view的src变量置为空,然后在A页面web-view上添加wx:if={{src!==''}}的条件控制,在src为空时销毁web-view,然后在B页面退回通过另一个变量把需要的url传递过去在A页面onShow,再设置src为一个我们期望的跳转url,总结一下:

A页面跳到B页面时设置A的src为空-销毁了`web-view`,退回A页面时在onShow方法在设置src的值-`web-view`被重新渲染

测试结果得到了预期:
页面被刷新,且没有了A页面退回两次的情况

 

场景:进入web-view页面时,因为没有登录,则跳转到login页登录,待返回时,判断是否有执行登录操作,

没有登录,直接返回,则返回首页。

登录,则返回veb-view页面

 

返回逻辑:

如果登录页前有大于2个页面,则返回上一页,

否则,返回首页

wx.setStorageSync('loginBack', 'lastPage'): 这个是用来判断,当页面返回上一页时,在onshow中执行,而不是在onload之后再执行onshow

 backPage(){
    let pages = getCurrentPages();
    if(pages.length > 1) {
      wx.setStorageSync('loginBack', 'lastPage')
        wx.navigateBack({
          delta: 1,
        })
      } else {
      wx.setStorageSync('loginBack', 'index')
      wx.switchTab({
        url: '/pages/index/index'
      })
    }
  },

该片段写在登录页的unload生命周期中。将src中的url置空,防止web-view二次刷新导致的返回需两次问题

 const loginBack = wx.getStorageSync('loginBack') 
    //loginBack 为空时,是没有进行登录操作的返回。
    if(!loginBack) {
      //若prepages 为活动页时,返回首页
      if(prevPage.route == 'pages/index/activity/activity') {
        wx.switchTab({
          url: '/pages/index/index'
        })
      }
    }else{
      //登录后返回,如果是活动页,则将url置空,解决web-view回退时需要回退两次的问题
      if(prevPage.route == 'pages/index/activity/activity') {
        prevPage.setData({url:''})
      }
    }

//活动页onshow

 /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    let activityOptions = wx.getStorageSync('activityOptions')
    const loginBack = wx.getStorageSync('loginBack')
    if(loginBack == "lastPage") {
      this.loadLogin(activityOptions)
      wx.setStorageSync('loginBack',null)
    }
  },

 

你可能感兴趣的:(小程序)