参考链接: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)
}
},