浏览器中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对象就了解到这里,希望大家能了解透彻。


          相关文章
          |
          1天前
          |
          存储 JSON JavaScript
          数据库操作对象 db,用于与浏览器的 localStorage 交互
          数据库操作对象 db,用于与浏览器的 localStorage 交互
          8 0
          |
          3天前
          |
          移动开发 前端开发 JavaScript
          解决浏览器兼容性问题的方法
          解决浏览器兼容性问题的方法
          不同的浏览器创建的对象是不同的
          不同的浏览器创建的对象是不同的
          |
          9天前
          |
          域名解析 存储 缓存
          HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
          【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
          23 5
          |
          10天前
          |
          编解码 JavaScript 前端开发
          **BOM**是浏览器对象模型,用于控制浏览器窗口
          【6月更文挑战第22天】**BOM**是浏览器对象模型,用于控制浏览器窗口,如`window`、`navigator`、`location`等,提供弹窗、定时器及事件处理功能。**DOM**是文档对象模型,将HTML文档转化为可编程的树结构,允许创建、修改元素及处理事件。两者协同工作,赋能JavaScript与网页交互。
          13 2
          |
          18天前
          |
          JavaScript 前端开发
          JavaScript BOM 浏览器对象模型
          JavaScript BOM 浏览器对象模型
          |
          9天前
          |
          JavaScript
          JS获取浏览器地址栏的多个参数值的任意值
          JS获取浏览器地址栏的多个参数值的任意值
          16 3
          |
          15天前
          |
          Web App开发 JavaScript 前端开发
          使用 JS 实现在浏览器控制台打印图片 console.image()
          在前端开发过程中,调试的时候,我们会使用 console.log 等方式查看数据。但对于图片来说,仅靠展示的数据与结构,是无法想象出图片最终呈现的样子的。 虽然我们可以把图片数据通过 img 标签展示到页面上,或将图片下载下来进行预览。但这样的调试过程实在是复杂,何不实现一个 console.image() 呢?
          22 1
          使用 JS 实现在浏览器控制台打印图片 console.image()
          |
          18天前
          |
          JavaScript 前端开发
          js怎样获取浏览器窗口尺寸
          js怎样获取浏览器窗口尺寸
          |
          2月前
          |
          Web App开发 JavaScript 前端开发
          浏览器与Node.js事件循环:异同点及工作原理
          浏览器与Node.js事件循环:异同点及工作原理