Window.history API学习笔记

Window.history API学习笔记

在现代前端开发中,单页应用(SPA)的流行让我们对于页面的浏览历史管理需求愈加明显。window.history API作为浏览器提供的原生API,能够帮助开发者更加细致地控制用户的导航体验。本文将介绍window.history API的几个常见方法,并探讨它们的使用场景。


一、window.history.length

首先简单了解一下window.history.length属性。它用于获取当前页面的历史堆栈长度,即用户在当前标签页中访问过的页面数量。对于调试和统计用户浏览深度的需求,length属性非常有用。

console.log(window.history.length); // 输出当前页面的历史记录数量

使用场景:通常用在判断用户是否是从其他页面跳转到本页面。例如,如果window.history.length为1,很可能用户直接访问了该页面,而不是从前一个页面跳转而来。


二、window.history.back() 和 window.history.forward()

window.history.back()window.history.forward()顾名思义,分别用于模拟用户点击“后退”和“前进”按钮的行为。这些方法没有参数,简单直接,非常适合在不想重新加载页面的情况下实现基本的页面导航。

window.history.back();   // 模拟后退
window.history.forward(); // 模拟前进

使用场景

  • 返回按钮:当页面有返回按钮而不希望用户重复点击浏览器的后退按钮时,可以用history.back()实现返回到前一个页面。
  • 单页应用:在SPA中,当用户切换视图后希望“返回”到之前的视图而不重新加载整个页面,backforward就很实用。

三、window.history.go()

window.history.go()是一个通用的导航方法,可以根据传入的参数在浏览记录中自由前进或后退。它接受一个整数参数:

  • 正数代表前进多少步;
  • 负数代表后退多少步;
  • 0刷新当前页面。
window.history.go(-1);  // 等同于 window.history.back()
window.history.go(1);   // 等同于 window.history.forward()
window.history.go(0);   // 刷新当前页面

使用场景history.go()对于复杂的导航需求更为灵活。例如,可以通过动态参数实现多步跳转,让页面的浏览体验更加流畅。


四、window.history.pushState() 和 window.history.replaceState()

这两个方法是window.history API的核心部分,特别是在SPA开发中。它们用于向浏览历史记录中添加或替换记录,但不会触发页面刷新。它们的区别在于:

  • pushState()会增加一条新的记录;
  • replaceState()则替换当前的历史记录。

它们的基本语法如下:

window.history.pushState(stateObject, title, url);
window.history.replaceState(stateObject, title, url);

参数解释

  • stateObject:一个与新的历史记录关联的状态对象,可用于存储页面的状态信息。
  • title:当前页面的标题(目前多数浏览器会忽略该参数)。
  • url:新的历史记录条目的URL。必须与当前页面同源,且不刷新页面。

使用示例

假设在一个电商网站上,用户浏览不同商品时希望更新浏览历史,而不触发页面刷新。可以使用pushState来实现这一需求。

// 用户点击某商品时调用
const product = { id: 101, name: 'Awesome Product' };
window.history.pushState(product, '', `/product/${product.id}`);

当用户在浏览器中点击“后退”按钮时,可以通过popstate事件捕获状态并还原页面状态:

window.addEventListener('popstate', (event) => {
    if (event.state) {
        // 根据 event.state 还原页面,比如重新渲染商品详情页
        console.log('Back to product:', event.state.name);
    }
});

使用场景

  • SPA路由管理pushStatereplaceState可以模拟“页面切换”效果,提供浏览历史记录。
  • 动态更新URL:在用户不跳转的情况下,更新URL,增强URL的可读性和分享性。
  • 自定义状态存储:结合stateObject,可以实现页面状态的恢复。比如,在电商、博客等网站可以使用它恢复用户的滚动位置或特定内容区域。

五、window.onpopstate 事件

当用户点击浏览器的前进或后退按钮,并触发页面历史记录的变化时,popstate事件就会被触发。通过监听这个事件,可以根据历史记录状态恢复页面的特定视图或状态。

window.addEventListener('popstate', (event) => {
    if (event.state) {
        // 恢复页面的状态
        console.log('Current state:', event.state);
    }
});

使用场景

  • SPA的视图状态恢复:监听popstate事件,当用户点击“后退”按钮时可以准确地还原之前的视图状态。
  • 动态内容更新:在不刷新页面的情况下,根据历史记录还原动态内容,例如表单输入、滚动位置等。

小结

window.history API通过一系列方法让我们能够更好地管理用户的浏览体验,尤其在SPA和动态内容较多的网站上尤为有用。从简单的backforward,到pushStatereplaceStatepopstate事件的组合使用,window.history赋予前端开发者对页面历史记录的高度控制,让用户体验更加流畅和个性化。


参考资料

  • MDN: Window.history
  • MDN: History.pushState()
  • MDN: History.replaceState()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/914454.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hbase集群搭建

1. 环境 三台节点hadoop 集群zookeeper 集群hbase 1.1环境准备 使用前文hdfs三台节点 1.11 zookeeper搭建 下载 wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz解压 tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz zookee…

物联网(RFID)全景:被装信息化监控应用与挑战

一、被装物联网信息化建设的动因 信息化改革在20世纪80年代中期启航,旨在提升被装保障的效率。随着时间的推移,硬件的广泛运用和软件的快速迭代,装备业务在规划、制造、分发以及战时支援等核心环节,已经与信息系统深度融合&#x…

2024 年 10 月公链行业研报:比特币引领市场,Layer 2 竞争加剧

作者:Stella L (stellafootprint.network) 数据来源:Footprint Analytics 公链研究页面 在中本聪于 2008 年 10 月 31 日发布比特币白皮书整整 16 年后,比特币再次展现了其对金融世界的革命性影响。2024 年 10 月,在机构投资者…

NCC前端调用查询弹框

系统自带的查询模板 弹框 调启使用默认的 查询模板 是在 单据模板的 列表模板中,有个查询区域 ,查询区域就是查询模板内容如果在列表页做客开 新增按钮 调启查询模板 无问题,但是目前需求是需要再卡片页面下调启系统标准的调启模板代码 //调…

网络安全常见面试题--含答案

本文面试题汇总: 防范常见的 Web 攻击 重要协议分布层 arp协议的工作原理rip协议是什么?rip的工作原理 什么是RARP?工作原理OSPF协议?OSPF的工作原理 TCP与UDP区别总结 什么是三次握手四次挥手? tcp为什么要三次握手&…

Vue 3 在现代前端开发中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 Vue 3 在现代前端开发中的应用 Vue 3 在现代前端开发中的应用 Vue 3 在现代前端开发中的应用 引言 Vue 3 概述 定义与原理 发展历…

Python 正则表达式使用指南

Python 正则表达式使用指南 正则表达式(Regular Expression, 简称 regex)是处理字符串和文本的强大工具。它使用特定的语法定义一组规则,通过这些规则可以对文本进行匹配、查找、替换等操作。Python 提供了 re 模块,使得正则表达…

OpenGL Phong光照模型-镜面反射-反射方向推导

反射方向计算公式如下: 其中R表示反射方向,L表示入射方向,N表示法向(单位向量)。 该公式推导如下: 1、首先入射方向、反射方向向量可分成两个分量分别是: 与法向N平行分量Ln、垂直于法向N分量…

006配置DHCP服务器

DHCP可以自动为计算机分配IP地址 环境准备 准备两台Linux系统和一台windows系统DHCP 服务器的IP地址为:192.168.239.100192.168.239.0/24 网络中有两个IP地址空间可以分配,因为100作为dhcp服务器地址 分别是: 192.168.239.1 ~ 192.168.239.…

基于微信小程序的药店管理系统+LW示例参考

1.项目介绍 系统角色:管理员、普通用户功能模块:管理员(用户管理、药品分类管理、药品信息管理、系统管理、订单管理等),普通用户(查看相关药品信息、充值、登录注册、个人中心、购物车、我的订单等&#…

https网站 请求http图片报错:net::ERR_SSL_PROTOCOL_ERROR

问题描述 场景: https网站,请求http图片资源报错:net::ERR_SSL_PROTOCOL_ERROR 原因: Chrome 81 中,对混合内容资源加载策略进行了改变,会自动升级到 https:// ,如果无法通过 https:// 加载&am…

JAVA后端生成图片滑块验证码 springboot+js完整案例

前言 现在大部分网部都是图片滑块验证码,这个得要与后端联动起来才是确保接口安全性 通过我们系统在发送手机短息时都会选进行滑块验证,但是我们要保证发送短息接口的全安,具体路思如下 那么这个滑块的必须是与后端交互才能保证安全性&…

Golang | Leetcode Golang题解之第556题下一个更大元素III

题目&#xff1a; 题解&#xff1a; func nextGreaterElement(n int) int {x, cnt : n, 1for ; x > 10 && x/10%10 > x%10; x / 10 {cnt}x / 10if x 0 {return -1}targetDigit : x % 10x2, cnt2 : n, 0for ; x2%10 < targetDigit; x2 / 10 {cnt2}x x2%10 -…

ceph介绍和搭建

1 为什么要使用ceph存储 什么是对象存储&#xff1f; 对象存储并没有向文件系统那样划分为元数据区域和数据区域&#xff0c;而是按照不同的对象进行存储&#xff0c;而且每个对象内部维护着元数据和数据区域。因此每个对象都有自己独立的管理格式。 对象存储优点&#xff1a…

MFC图形函数学习07——画扇形函数

绘制扇形函数是MFC中绘图的基本函数&#xff0c;它绘制的仍是由椭圆弧与椭圆中心连线构成的椭圆扇形&#xff0c;特例是由圆弧与圆心连线构成的圆扇形。 一、绘制扇形函数 原型&#xff1a;BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); …

macOS15.1及以上系统bug:开发者证书无法打开,钥匙串访问无法打开一直出现图标后立马闪退

团队紧跟苹果最新系统发现bug:今日设备信息如下,希望能带给遇到这个问题的开发者一点帮助。 错误图如下: 点击证书文件后,先出现钥匙串访问图标,后立马闪退消失 中间试过很多方法,都是一样的表现,最后好在解决了,看网上也没有相关的帖子,这里直接写解决办法和导致原因…

Kotlin约束泛型参数必须继承自某个父类

Kotlin约束泛型参数必须继承自某个父类 open class SuperData { }class DataA : SuperData {constructor() {println("DataA constructor")} }class DataB : SuperData {constructor() {println("DataB constructor")} }fun <T : SuperData> myfun(p…

量子计算及其在密码学中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 引言 量子计算概述 定义与原理 发展…

【大数据学习 | HBASE高级】storeFile文件的合并

Compaction 操作分成下面两种&#xff1a; Minor Compaction&#xff1a;是选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile&#xff0c;对于删除、过期、多余版本的数据不进行清除。 Major Compaction&#xff1a;是指将所有的StoreFile合并成一个StoreFile&am…

任务中心全新升级,新增分享接口文档功能,MeterSphere开源持续测试工具v3.4版本发布

2024年11月5日&#xff0c;MeterSphere开源持续测试工具正式发布v3.4版本。 在这一版本中&#xff0c;系统设置方面&#xff0c;任务中心支持实时查看系统即时任务与系统后台任务&#xff1b;接口测试方面&#xff0c;新增接口文档分享功能、接口场景导入导出功能&#xff0c;…