js vue 监听 浏览器历史记录 控制手机实体返回键

news/2024/10/20 8:44:20/

 简单示例:

先上代码,下面代码实现的是监听浏览器历史记录发生变化,替换当前界面的历史路由(站点记录)从而控制页面跳转

//页面生命周期:监听页面加载
onLoad(option) {if (window.history && window.history.pushState) {history.replaceState(null, null, this.$config.host_dev_b + '/h5/#/pages/customer/getUser') //替换当前界面历史站点记录//浏览器界面前进后退记录发生变化的监听事件window.addEventListener('popstate', this.goBack, false)}
},
//生命周期钩子:实例销毁后调用
destroyed() {this.$router.replace({path: '/pages/main/mainForB'})//替换当前浏览器就后,返回时跳转界面设置// 移除监听,否则其他界面会一直执行该监听事件,false阻止默认事件window.removeEventListener('popstate', this.goBack, false)
},
methods:{goBack() {uni.switchTab({url: '/pages/main/mainForB'})//替换当前浏览器就后,返回时跳转界面设置//移除监听,否则其他界面会一直执行该监听事件,false阻止默认事件window.removeEventListener('popstate', this.goBack, false)}
}

看不懂,别着急,慢慢往下看,耐住性子,你会得到你想要的,加油!

uniapp H5开发中会遇到很多关于前进后退的操作,像ios系统实体返回键(手机上的返回按钮)在返回上一层的时候就容易出错,比如我在某个界面定义了微信SDK配置等信息同时已进入界面就调用了地图(外链),然后选择位置带回界面,在重复执行就会造成数据丢失SDK配置错误,这时候在操作实体返回键的时候,将历史记录更改或替换,就不会出现该错误

window.history.back()window.history.forward()与浏览器的后退前进一样分别表示向后一页和向前一页。

window.history.go(num):

该方法采用一个整数作为参数,表示在历史堆栈中前进或后退多少步,

括号内直接填写数字num。正数:前进n个页面,负数:后退n个页面

// 向前移动一条记录,与 router.forward() 相同
router.go(1)// 返回一条记录,与 router.back() 相同
router.go(-1)// 前进 3 条记录
router.go(3)// 如果没有那么多记录,静默失败
router.go(-100)
router.go(100)

window.location:

location.href或者this.$router.push()、history.pushState()方法跳转,则会向历史记录栈中添加一条数据

history.replaceState()与 history.pushState() 不同的是replaceState()  是修改了当前的历史记录项而不是新建一个,替换了当前的历史记录值

window.history.pushState():改动站点路径创建新的历史记录

/**
* 参数
* state: histroy.state 这个属性,如果你不做任何标识可以传null
* title: 浏览器标题(现在都不支持,所以都传空字符串'',你可以通过document.title = 'xxxx'去修改)
* url: 当前要修改的url,新的URL可以是任何和当前URL同源的URL     ps: '/xxxx'
* 该方法会让histroy.length 加一
*/
window.history.pushState(state, title, url)

window.history.replaceState()改动站点路径(更新当前的历史路径)不创建新的历史记录

/**
* 参数
*  state: histroy.state 这个属性,如果你不做任何标识可以传null
*  title: 浏览器标题(现在都不支持,所以都传空字符串'',你可以通过document.title = 'xxxx'去修改)
*  url: 当前要修改的url,新的URL可以是任何和当前URL同源的URL。 ps: '/xxxx'
* 该方法不会让histroy.length 加一,直接替换当前的历史栈      
*/
window.history.replaceState(state, title, url)

if (window.history && history.pushState){

  // 支持History API

} else {

  // 不支持

}

上面代码可以用来检查,当前浏览器是否支持History API。如果不支持的话,可以考虑使用Polyfill库History.js。可以参考文章开头的示例

this.$router.push()

跳转到指定URL,向history栈添加一个新的纪录,点击后退会返回至上一个页面

//编程写法:
//字符串
this.$router.push('/index') 
// 对象
this.$router.push({path:'/index'})
// 带查询参数,变成/backend/order?selected=2/,query传参
this.$router.push({path:'/index', query:{name: '123'} })
// 命名的路由 params传参
this.$router.push({name:'index', params:{name: '123'} })
//声明写法:
< router-link :to = “…” >

this.$router.replace()

方法跳转到指定URL,则不会向历史记录栈中添加数据,点击返回按钮不会回到这个页面

简单举例:A=> B=> C,在B=> C时用了replace,则B被C替换,历史记录的栈就成了这样:A=> C。此时,在C页面点击返回时会跳到A页面。

//编程写法
router.replace(...)
// push方法也可以传replace
this.$router.push({path: '/homo', replace: true})
//声明写法
<reouter-link :to="..." replace></router-link>

PS:this.$route.push({ path: '/home', replace: true })相当于this.$route.replace({ path: '/home' })

好了,以上完毕,实在理解不透彻,就每个都敲代码试下,加油!


http://www.ppmy.cn/news/66151.html

相关文章

【sentinel】热点规则详解及源码分析

何为热点&#xff1f;热点即经常访问的数据。很多时候我们希望统计某些热点数据中访问频次最高的Top K数据&#xff0c;并对其访问进行限制。 比如&#xff1a; 商品ID为参数&#xff0c;统计一段时间内最常购买的商品ID并进行限制用户ID为参数&#xff0c;针对一段时间内频繁…

DAY 57 MySQL数据库的事务

事务的概念 事务是一种机制、一个操作序列&#xff0c;包含了一组数据库操作命令&#xff0c;并且把所有的命令作为一个 整体一起向系统提交或撤销操作请求&#xff0c;即这一组数据库命令要么都执行&#xff0c;要么都不执行。事务是一个不可分割的工作逻辑单元&#xff0c;在…

MathGPT是什么,MathGPT与ChatGPT的区别是什么,MathGPT十大应用场景

MathGPT是一种基于自然语言处理技术的数学语言模型&#xff0c;其目的是通过自动化生成数学公式、证明和解题步骤等来辅助数学学习和研究。 与ChatGPT相比&#xff0c;MathGPT主要关注数学领域而非通用性的自然语言理解&#xff0c;因此其训练语料库和预测任务都与数学有关&…

[图神经网络]ViG(Vision GNN)网络代码实现

论文解读&#xff1a; [图神经网络]视觉图神经网络ViG(Vision GNN)--论文阅读https://blog.csdn.net/weixin_37878740/article/details/130124772?spm1001.2014.3001.5501代码地址&#xff1a; ViGhttps://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/vig_p…

Springboot +Flowable,三种常见网关的使用(排他、并行、包容网关)(二)

一.简介 Flowable 中常用的网关主要有三种类型&#xff0c;分别是&#xff1a; 排他网关并行网关包容网关 下面来说下这三种的网关的概念和用法。 二.并行网关 并行网关&#xff0c;这种网关一般用在并行任务上&#xff0c;截图如下&#xff1a; 并行网关一般是成对出现的…

Overcoming catastrophic forgetting in neural networks

目录 预备知识&#xff1a; 论文笔记 1. Introduction 2. Elastic weight consolidation 2.1 EWC allows continual learning in a supervised learning context 2.2 EWC allows continual learning in a reinforcement learning context 3. Conclusion 文章链接&#x…

微信小程序从入门到精通

目录 前言一&#xff0c;初学小程序1.1 小程序概述1.2 基础配置1.2.1 注册开发账号1.2.2 获取AppID1.2.3 微信开发者工具1.2.4 修改代理模式 1.3 第一个小程序1.4 开发文档1.5 机型1.6 项目基本结构1.6.1 页面内部文件1.6.2 app.json1.6.3 project.config.json1.6.4 sitemap.js…

redis 数据类型简介

redis 数据类型 redis的五种数据类型是&#xff1a;1、string&#xff08;字符串&#xff09;&#xff1b;2、hash&#xff08;哈希&#xff09;&#xff1b;3、list&#xff08;列表&#xff09;&#xff1b;4、set&#xff08;集合&#xff09;&#xff1b;5、sort set &…