8***@qq.com
8***@qq.com
  • 发布:2023-01-16 15:50
  • 更新:2023-01-16 16:26
  • 阅读:205

uniapp h5端绑定popstate事件会直接触发

分类:uni-app

代码如下:

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()也不可以,依旧可以回退到之前的页面,希望大佬能解惑!

2023-01-16 15:50 负责人:无 分享
已邀请:
8***@qq.com

8***@qq.com (作者)

原来是因为我在绑定事件的时候function名字后面加了括号,把括号去掉就好了,无语了!

DCloud_UNI_WZF

DCloud_UNI_WZF

你的写法有问题,注意看我在该 帖子 的回复,绑定事件的时候不应该调用

window.addEventListener('popstate', this.handleback());  

应该是

window.addEventListener('popstate', this.handleback);  

要回复问题请先登录注册