代码如下:
onShow() {
console.log('onshow');
history.pushState(null, null, document.URL);
window.addEventListener('popstate', this.handleback());
},
onUnload(){
console.log('onunload')
setTimeout(() => {
window.removeEventListener('popstate', this.handleback());
},300)
},
onHide() {
console.log('onhide');
window.removeEventListener('popstate', this.handleback());
}
//中间代码省略
...
methods: {
handleback(){
console.log('触发返回')
}
}
测试中发现onhide和onshow事件都会触发handleback()输出“触发返回”,如下图
这样就没有办法在handleback()函数中将页面重新定位到首页,否则将会形成死循环,不知道是我的写法上有问题还是其他问题,十分的困扰!
另外还发现在handleback()中添加history.pushState(null, null, document.URL)语句向历史记录中新增信息,使用uni.showmodel方法可以保证上一页始终为当前页,代码如下:
handleback(){
console.log('触发返回')
var vm = this;
var myback = function(){
console.log('success')
history.pushState(null, null, document.URL);
console.log(history.length)
}.bind(vm)
uni.showModal({
title: '是否返回?',
confirmText: '返回',
success: myback
})
}
这样可以让上一页始终为当前页,达到我想要的目的,即 使得该页面无法返回。
但是直接执行myback()就不行,代码如下
handleback(){
console.log('触发返回')
var vm = this;
var myback = function(){
console.log('success')
history.pushState(null, null, document.URL);
console.log(history.length)
}.bind(vm)
myback();
}
即使是延时执行myback()也不可以,依旧可以回退到之前的页面,希望大佬能解惑!