如何使用 BOM 中的 history 对象?

简介: 【10月更文挑战第31天】`history` 对象的这些方法为开发者提供了强大的工具,用于管理浏览器历史记录和实现无刷新页面导航,尤其在构建单页应用(SPA)等需要复杂页面状态管理的场景中具有重要的应用价值。

history 对象是 BOM(Browser Object Model)中的一个重要对象,它提供了操作浏览器历史记录的方法,

history.back() 和 history.forward()

  • 功能
    • history.back() 方法用于加载历史记录中的前一个页面,其效果等同于用户点击浏览器的“后退”按钮。
    • history.forward() 方法则用于加载历史记录中的下一个页面,类似于用户点击浏览器的“前进”按钮。
  • 示例
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>History 对象示例</title>
</head>

<body>
  <button onclick="goBack()">后退</button>
  <button onclick="goForward()">前进</button>

  <script>
    function goBack() {
    
      history.back();
    }

    function goForward() {
    
      history.forward();
    }
  </script>
</body>

</html>

在上述示例中,通过点击页面上的“后退”和“前进”按钮,分别调用 history.back()history.forward() 方法来实现浏览器历史记录的导航。

history.go()

  • 功能:该方法接受一个整数参数,用于在历史记录中向前或向后跳转指定的页面数。正数表示向前跳转,负数表示向后跳转。例如,history.go(-2) 表示向后跳转两个页面,history.go(1) 表示向前跳转一个页面。
  • 示例
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>History 对象示例</title>
</head>

<body>
  <button onclick="goBackTwoPages()">后退两页</button>
  <button onclick="goForwardOnePage()">前进一页</button>

  <script>
    function goBackTwoPages() {
    
      history.go(-2);
    }

    function goForwardOnePage() {
    
      history.go(1);
    }
  </script>
</body>

</html>

history.pushState() 和 history.replaceState()

  • 功能
    • history.pushState() 方法用于向浏览器历史记录中添加一个新的状态记录,同时改变当前的 URL,但不会触发页面刷新。这使得开发者可以在不刷新页面的情况下,通过修改 URL 来反映页面的不同状态,并且用户可以使用浏览器的“后退”和“前进”按钮在这些状态之间导航。
    • history.replaceState() 方法用于修改当前历史记录的状态信息,同样不会刷新页面。它与 history.pushState() 的区别在于,它不会在历史记录中添加新的记录,而是直接替换当前记录的状态。
  • 示例
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>History 对象示例</title>
</head>

<body>
  <button onclick="addHistoryState()">添加历史记录状态</button>
  <button onclick="replaceHistoryState()">替换历史记录状态</button>

  <script>
    function addHistoryState() {
    
      var stateObj = {
     page: 'newPage', data: 'Some data' };
      history.pushState(stateObj, 'New Page Title', 'new-page.html');
    }

    function replaceHistoryState() {
    
      var newStateObj = {
     page: 'modifiedPage', data: 'Modified data' };
      history.replaceState(newStateObj, 'Modified Page Title', 'modified-page.html');
    }
  </script>
</body>

</html>

在上述示例中,点击“添加历史记录状态”按钮时,使用 history.pushState() 方法添加了一个新的历史记录状态,URL 变为 new-page.html,同时可以传递一个状态对象用于存储相关数据;点击“替换历史记录状态”按钮时,使用 history.replaceState() 方法替换了当前历史记录的状态,URL 变为 modified-page.html

监听历史记录变化事件

  • 当用户通过浏览器的“后退”或“前进”按钮,或者通过 history.pushState()history.replaceState() 方法改变历史记录时,会触发 popstate 事件。可以通过监听该事件来执行相应的操作,以响应历史记录的变化。
  • 示例
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>History 对象示例</title>
</head>

<body>
  <script>
    window.addEventListener('popstate', function (event) {
    
      console.log('历史记录发生变化,当前状态:', event.state);
      // 根据不同的历史记录状态执行相应的操作
    });
  </script>
</body>

</html>

在上述示例中,通过监听 popstate 事件,可以在历史记录发生变化时获取当前的历史记录状态,并根据状态信息执行相应的逻辑,从而实现与浏览器历史记录的交互和响应。

history 对象的这些方法为开发者提供了强大的工具,用于管理浏览器历史记录和实现无刷新页面导航,尤其在构建单页应用(SPA)等需要复杂页面状态管理的场景中具有重要的应用价值。

目录
相关文章
|
消息中间件 Java 开发者
【颠覆想象】Spring Boot重构未来:解耦与隔离,打造坚不可摧的微服务帝国!
【8月更文挑战第29天】本文通过构建电子商务平台的具体案例,深入探讨了如何利用 Spring Boot 实现服务间的解耦与隔离。文章详细介绍了依赖注入、模块化设计及异步通信等关键技术,并提供了具体代码示例。通过依赖注入,对象间耦合得以降低;模块化设计使各功能域独立,降低系统复杂度;异步通信则利用消息队列提升系统吞吐量与响应速度。这些方法不仅优化了系统架构,还加快了开发进程。
304 0
|
资源调度 JavaScript 前端开发
Day.js常用方法集合
Day.js常用方法集合
629 0
|
前端开发
调试前端时,在浏览器上修改参数并重新调用接口
有时候我们的页面点击过了,但是接口出问题,想修改参数再调用一次,一般是用apiPost工具把接口复制,再加上token和参数,但是这样非常的效率比较低。
2111 0
|
域名解析 网络协议 Linux
【异常解决】UnknownHostException: api.weixin.qq.com 的解决方案
【异常解决】UnknownHostException: api.weixin.qq.com 的解决方案
1518 0
|
JavaScript 前端开发 编译器
TypeScript,从0到入门带你进入类型的世界
该文章提供了TypeScript的入门指南,从安装配置到基础语法,再到高级特性如泛型、接口等的使用,帮助初学者快速掌握TypeScript的基本用法。
|
监控 算法 安全
基于颜色模型和边缘检测的火焰识别FPGA实现,包含testbench和matlab验证程序
本项目展示了基于FPGA的火焰识别算法,可在多种应用场景中实时检测火焰。通过颜色模型与边缘检测技术,结合HSV和YCbCr颜色空间,高效提取火焰特征。使用Vivado 2019.2和Matlab 2022a实现算法,并提供仿真结果与测试样本。FPGA平台充分发挥并行处理优势,实现低延迟高吞吐量的火焰检测。项目包含完整代码及操作视频说明。
|
存储 分布式计算 负载均衡
在Linux中,什么是集群,并且列出常见的集群技术。
在Linux中,什么是集群,并且列出常见的集群技术。
|
Prometheus Kubernetes 监控
在K8S中,Pod请求另一个pod偶尔出现超时或延迟,如何排查?
在K8S中,Pod请求另一个pod偶尔出现超时或延迟,如何排查?
|
SQL 存储 关系型数据库
关系性数据库操作语言(DML)
DML是关系型数据库管理系统的关键工具,用于查询、插入、修改和删除数据。主要包含SELECT(查询)、INSERT(插入)、UPDATE(修改)和DELETE(删除)语句。DML以其交互性和灵活性使用户能动态操作数据,但需注意事务管理以保持数据一致。DML与DDL(定义数据库结构)和DCL(控制访问权限)共同构建了完整的数据库语言体系,用于高效管理和存储数据。
702 2
|
物联网 开发工具 开发者
NRF52832官方SDK介绍
SDK(Software Development Kit)是指软件开发包,一般是由官方提供,主要用来介绍开发流程,提供常用的例程代码等等。可以降低开发者使用的门槛,提高开发效率,所以在开发者在进行具体的开发前必须先熟悉官方的SDK,一般可以在对应的官网获取(有些网站是开放的,可以直接下载,有些网站需要申请)。
1195 0