浏览器中BOM(浏览器对象模型)重点掌握对象之History对象的属性与方法

简介: 在学过JavaScript之后,我们都知道对象分为内置对象 、宿主对象 、自定义对象,我们经常用到的浏览器中的内置对象就是宿主对象的一种,浏览器的内置对象有很多,本文就来详细讲解一下History对象的属性与方法吧

History对象的作用


History对象是用来把网页浏览历史用类似栈的方式进行表示。


这定义听起来非常的抽象,其实History对象的作用就跟浏览器的前进和后退很像,我们来用几幅图来理解一下。首先我们先回顾一下浏览器的返回上一个页面跳转到下一个页面 这两个功能。

0558e541c2be1c61a05afa209ea55f4e.png


就类似于上图的左边两个按键,大家是否感觉很熟悉呢?我们用一张动图感受一下


5ee0bc60b0b7a1de72cf6ae595f8bfd0.jpg


该动图展示的是页面1跳转到页面2,页面2跳转到页面3,然后可以通过浏览器的后退和前进按钮在这三个页面之间切换。


接下来我们来看一下它的实现原理,因为有些小伙伴可能不知道栈结构,这里我就拿两个没有盖子的杯子来举例,第一个杯子最上面的绿色块儿代表当前所在的页面


首先我们浏览器未做任何跳转页面操作时,这第一个杯子中有一个页面1,表示当前页面为页面1,第二个杯子为空

74fd0fdd825386b209943117d20c2677.png

这时我们从页面1跳转到页面2,就会往第一个杯子中放入一个绿色块儿(页面2),此时页面2处于第一个杯子的最上方,表示当前页面为页面2,但第二个杯子仍为空

7b91bae08443341250b4881fa44475e8.png

这时我们从页面2跳转到页面3,就会往第一个杯子中放入一个绿色块儿(页面3),此时页面3处于第一个杯子的最上方,表示当前页面为页面3,第二个杯子还是为空

ef23722e31cdc2e6e5e9ff90e5cd5993.png

现在我们使用浏览器的后退功能,也就是返回上一个页面,此时将页面3放到第二个杯子中,这时页面2就变成了第一个杯子中最上面的绿块儿了,所以此时处于页面2

8678f1ad24064a8becdac3a4fd9649ce.png

现在我们再次使用浏览器的后退功能,也就是返回上一个页面,此时将页面2放到第二个杯子中,这时页面1就变成了第一个杯子中最上面的绿块儿了,所以此时处于页面1

f59725cedfb7890ad7f3590ef6ee96d9.png

我们再使用一下浏览器的前进功能,此时将第二个杯子最上面的绿块儿,也就是页面2,放到第一个杯子中,此时页面2又变成了第一个杯子中最上面的绿块儿,所以当前页面为页面2

07ec2b0bbcf8397b73ae6484c323dfd4.png

我们再使用一下浏览器的前进功能,此时将第二个杯子最上面的绿块儿,也就是页面3,放到第一个杯子中,此时页面3又变成了第一个杯子中最上面的绿块儿,所以当前页面为页面3


f1f9741bb9e2b622a7ac68f9470bd76d.png

好了,经过这样一番讲解,想必你已经对浏览器的前进和后退功能有了一个大概的了解了吧,那我们接下来就来了解一下History对象的三个方法。

History对象的引用


我们可以通过浏览器的全局对象window来引用History对象,像这样window.hisory ,也可以直接通过 history 来引用History对象。


    window.hisory === history      //返回 true

    我们在浏览器的控制台中引用一下History对象,看看会返回什么


    9590f765a38135487d7f0ef5f90139b5.png


    可以看到,返回的History对象中有许多的属性和方法,接下来我们就对这些属性和方法进行讲解。


    History对象的方法


    History对象一共有三种方法,他们分别是:


    方法 描述
    back() 加载前一个URL对应的页面
    forward() 加载下一个URL对应的页面
    go() 根据传入的参数加载某个URL对应的页面


    这里我又把上面举过的例子拿了过来

    f59725cedfb7890ad7f3590ef6ee96d9.png

    总结一下,第一个杯子内最上面的绿块儿就代表当前页面,加载下一个URL对应的页面就是从第二个杯子的最上方拿一个绿块儿放到第一个杯子中;加载前一个URL对应的页面就是从第一个杯子的最上面拿一个绿块儿放到第二个杯子中。


    • back()


    调用该方法不需要传递任何参数,直接调用即可。该方法会加载前一个URL对应的页面,相当于浏览器的后退功能。


      //相当于执行了浏览器的后退功能history.back()


      动图展示


      e6edfb673184f040a892defafaa86e53.jpg


      • forward()


      调用该方法不需要传递任何参数,直接调用即可。该方法会加载下一个URL对应的页面,相当于浏览器的前进功能。


        //相当于执行了浏览器的前进功能history.forward()


        动图展示


        2055c907fb18d85e753077d887049924.jpg


        • go()


        前两个方法都是加载上一个URL或下一个URL,相当于他们只能一次操作一个绿块儿,但 go() 方法允许一次性操作多个绿块儿。该方法需要传入一个整数作为参数,参数的规则为:


        若传入一个正整数n,则表示加载接下来第n个URL,相当于执行了浏览器的前进功能n次;


        若传入一个负整数n,则表示加载之前第n个URL,相当于执行了浏览器的后退功能n次;

        若传入一个0,则表示刷新当前页面;


        若省略该参数,效果跟传入0一样;


          //相当于执行了浏览器的前进功能2次history.go(2)
          //相当于执行了浏览器的后退功能3次history.go(-3)
          //相当于刷新了当前页面history.go(0)


          动图展示


          f84edd9fcd4927a3b65253327ac75635.jpg


          History对象的属性


          History对象中需要讲解的属性就只有一个,那就是 length,该属性表示可前进后退的URL的数量,也相当于我们举的例子中两个杯子加起来绿块儿的数量。并且该属性是一个只读属性。


          我们来看一下这个例子中的 length 是多少


          8d68331f4745b5470f052d945ea45fde.jpg


          我们可以看到,刚开始length属性为1,每跳转到一个新的页面,length属性就加1,并且执行了浏览器的后退功能,length属性也不会改变。相当于我们原本只有第一个杯子里有一个页面1,所以绿块儿总个数为1,所以length为1;当我们跳转到页面2时,往第一个杯子中加入了一个页面2,所以绿块儿总个数为2,所以length为2;当我们执行后退功能时,只是对绿块儿进行了移动,并没有移除,所以length的值不会改变。

          我们再来验证一下length的只读性


          56f32760f9eb98669d563daf74dc7ad9.jpg


          我们可以看到,即使我们试图去修改length的值,但实际是没有什么用的,length属性并没有被我们改掉,所以该属性只是一个只读属性。


          结束语


          好了,这History对象就了解到这里,希望大家能了解透彻。


          相关文章
          |
          2月前
          |
          存储 人工智能 前端开发
          前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
          本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
          148 2
          |
          2月前
          |
          XML 编解码 JavaScript
          DOM(文档对象模型)和 BOM(浏览器对象模型)
          【10月更文挑战第19天】在前端开发中,理解 DOM(文档对象模型)和 BOM(浏览器对象模型)是至关重要的。它们是 Web 开发的基础,为我们提供了与网页文档和浏览器进行交互的能力。
          |
          2月前
          |
          Web App开发 JavaScript 前端开发
          JavaScript Window - 浏览器对象模型
          JavaScript Window - 浏览器对象模型
          23 2
          |
          2月前
          |
          算法 安全 前端开发
          基于postMessage和BroadcastChannel实现浏览器跨Tab窗口通信的方法介绍
          基于postMessage和BroadcastChannel实现浏览器跨Tab窗口通信的方法介绍
          89 0
          |
          3月前
          |
          JavaScript 前端开发
          js之浏览器对象|28
          js之浏览器对象|28
          |
          4月前
          |
          机器学习/深度学习 存储 前端开发
          实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
          【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
          55 1
          |
          4月前
          |
          API UED 开发者
          如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
          【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
          85 0
          |
          26天前
          |
          JSON 移动开发 JavaScript
          在浏览器执行js脚本的两种方式
          【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
          在浏览器执行js脚本的两种方式
          |
          23天前
          |
          机器学习/深度学习 自然语言处理 前端开发
          前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
          本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
          |
          2月前
          |
          机器学习/深度学习 自然语言处理 前端开发
          前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
          除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
          507 1