history是JavaScript中BOM上的一个对象,其中存储了浏览器的历史记录

history存储简单过程

浏览器会将一个窗口中访问的网页进行记录,不管我们通过以下哪种方式改变页面,浏览器都会把改变后的网页记录下来,
以便通过浏览器的前进和后退按钮,可以快速切换到已经访问到的页面。
这些方式是:

  1. 直接在地址栏输入网页地址
  2. 超链接点击跳转到其他页面(必须保证在同一个窗口下跳转)
  3. 脚本改变location.href
  4. 表单提交跳转(必须保证在同一个页面下跳转)

浏览器使用的一个类似栈的数据结构来存储历史记录。其功能的实现主要是根据栈和一个访问指针来实现的。
首先,历史记录的进栈与出栈是遵从“先进后出”的原则,每次添加新记录都是将该记录放到访问指针相邻的上方位置
注意:一般情况下访问指针都是位于栈顶处,如果当前访问指针不是位于栈顶(例如用户进行了回退操作),此时我们改变页面,浏览器会将当前指针上边的历史记录全部舍弃,而将新历史记录添加到栈顶,然后访问指针指向它)。

然后,访问指针表示的是当前网址带历史记录栈中的位置。
之后页面的前进和后台只是让访问指针在栈中上移一个位置和下移一个位置而已。
注意: 当我们打开一个空白标签页,即没有指定具体url时,浏览器也会为该窗口创建history对象,然后将空白页作为历史记录中的第一条记录)

history对象的一些属性和方法

属性:

  1. history.length 返回当前窗口历史记录的条数

方法:

  1. history.forward() 历史记录中当前页面的上一个页面(就是访问指针上移一个位置)
  2. history.back() 历史记录中当前页面的下一个页面(就是访问指针下移一个位置)
  3. history.go(n) 历史中前进或后退n个页面(n为正则前进,否则后退);
    注意:如果操作超出历史记录范围,操作不会生效)

历史记录管理

我们通过修改hash和hashchange事件来实现历史记录的管理。
用pushState来添加一条历史记录

history.pushState(state, title, url);

用replaceState来替换当前历史记录

history.replaceState(state, title, url);

popstate事件:
当历史记录发生改变时触发事件
调用history.pushState()或者history.replaceState()不会触发popstate事件,只有在做出浏览器动作时,才会触发该事件,如用户点击浏览器的回退按钮(或者在Javascript代码中调用history.back())

    window.addEventListener('popstate', function(e) {
// handle
console.log(e);
}, false);

hashchange事件:
当hash值改变该事件会被触发

window.addEventListener('hashchange', function (e){
// handle
})

BOM之history的更多相关文章

  1. BOM对象——History

    BOM对象--History <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  2. BOM之history对象

    前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后 ...

  3. BOM之history对象(转)

    前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后 ...

  4. JavaScript(JS)之Javascript对象BOM,History,Location,Function...(二)

    https://www.cnblogs.com/haiyan123/p/7594046.html 在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创 ...

  5. JS BOM对象 History对象 Location对象

    一.BOM对象 BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作 window对象 所有浏览器都支持 window 对象. 概念上讲.一个html文档对应一个window对象. 功能上讲: 控 ...

  6. BOM 子对象,history,location,screen

    history:包括浏览器访问过的 url 属性:返回浏览器访问过的历史记录数 方法:back(); forward(); go(number) location:包含当前 url 的相关信息 属性: ...

  7. JavaScript 之 BOM

    BOM BOM(Bowser Object Model)   浏览器对象模型 提供了独立于页面内容而与浏览器就行交互的对象,核心对象是window. (BOM 无标准支持) Navigator 浏览器 ...

  8. window对象,BOM,window事件,延时器,DOM

    01.定时器补充 function fn(){    console.log(1);}setInterval("fn()",100);  //定时器调用匿名函数/*   funct ...

  9. JS 浏览器BOM

    BOM:Browser Object Model 浏览器对象模型 2.组成: window :窗口对象 1.创建: 2.方法: *与弹出框有关 1.alert(); 弹出警告框 2.confirm() ...

随机推荐

  1. session的两个小案例

    学完了session,写两个小案例加深一下对session的巩固. 1. 用户登陆案例 登陆html页面提交后,将参数带给处理登陆的servlet,该servlet将获得登陆的用户名和密码,并将这些信 ...

  2. adb pull adb push

    adb pull:数据从真机到计算机 adb push: 数据从计算机到真机 使用方法: 在android开发环境的sdk--platform tools中安装了adb,在该目录下运行“adb pul ...

  3. 【android】listview改变选中行背景图片

    [android]listview改变选中行背景图片 目标:当item选中时,改变其背景图片.效果图如下: 直接在listview的xml文件中使用listselector: 1 2 3 4 5 6 ...

  4. java之Cookie具体解释

    Cookie是由server端生成.发送给User-Agent(通常是浏览器).浏览器会将Cookie的key/value保存到某个文件夹下的文本文件内.下次请求同一站点时就发送该Cookie给ser ...

  5. VM虚拟机内ubuntu无法连接到网络

    VM虚拟机内ubuntu无法连接到网络 解决:编辑网络,将网路都删除掉.又一次加入网络桥接和NAT链接. .又一次连接就可以,查看一下ip地址. 方法2: 虚拟机中新装ubuntu 编辑虚拟网络,先恢 ...

  6. webpack 使用配置

    注意:webpack 2.0版本之后有所区别 一.插件篇 1. 自动补全css3前缀 autoprefixer 官方是这样说的:Parse CSS and add vendor prefixes to ...

  7. linux sublime python

    (三)配置python3编译环境 1.点击上部菜单栏Tools->Build System ->new Build System 2.点击之后,会出现一个空的配置文件,此时,往这个空配置文 ...

  8. APPLE ID随意转区到US或者HK.不需要信用卡

    看到论坛有封釉想去US 或者HK 的商店下载大陆商店没有的APP.(比如 Tumblr) 但是现在在手机上或者是网页管理apple id 更改地区,需要输入付款信息. 现在教大家利用旧版的icloud ...

  9. java,jquery对json的解析

    json常用于浏览器对服务器的数据传递,所以,我们会经常在浏览器和服务器段对json进行封装和拆装,下面对这些进行简单介绍吧 1,服务器端,也就是java方面,我们用的是 net.sf.json-li ...

  10. SQL_为表和列加凝视

    ***********************************************声明*************************************************** ...