history对象包含用户访问过的URL,属于window对象的一部分,传统的使用中,它拥有length属性(浏览器历史列表URL数目)

及back()、forward()、go()方法。

而新的H5则赋予了其更多的新特性:

往返缓存

默认情况下,浏览器会缓存当前会话页面,这样当下一个页面点击后退按钮,或前一个页面点击前进按钮,浏览器便会从缓存中提取并加载此页面,这个特性被称为“往返缓存”。

备注: 此缓存会保留页面数据、DOM和js状态,实际上是将整个页面完好无缺地保留

------------沉默分割线-----------------------------------------------------------------------------------------------------------------------

pushState(state, title, url) 

往历史记录栈中添加记录

支持度: IE10+

state: 一个js对象,主要用于在popstate事件中作为参数被获取

title: 新页面的标题,部分浏览器(比如firefox)忽略此参数,因此一般为null

url: 新历史记录的地址,可为页面地址也可为一个锚点值,新url必须与当前url处于同一个域,否则将抛出异常,此参数若没有特别标注,会被设为当前文档url

实例:

假定当前网址是example.com/1.html,使用pushState方法在浏览记录(history对象)中添加一个新记录

var stateObj = { foo: 'bar' };
history.pushState(stateObj, 'page 2', '2.html');

浏览器地址栏将立即变成example.com/2.html,但并不会跳转到2.html,甚至不会检查2.html是否存在,也不会再popstate事件中获取,因为:这个方法仅仅是添加了一条最新记录,不会触发页面刷新

备注:

1.将url设为锚点值时不会触发hashchange

2.如果设置不同域名地址,会报错,这样做的目的是:防止用户以为它们是同一个网站,若没有此限制,将很容易进行XSS、CSRF等攻击方式

------------华丽分割线--------------------------------------------------------------------------------------------------------------------------

replaceState(state, title, url)

支持度: IE10+

参数与pushState一致,但其功能是改变当前的历史记录而不是添加新的记录。

同样不会触发popstate

------------璀璨分割线--------------------------------------------------------------------------------------------------------------------------

history.state

支持度: IE10+

返回当前历史记录的state

--------------曼妙分割线---------------------------------------------------------------------------------------------------------------------

popstate事件

支持度: IE10+

语法: window.onpopstate= function(event){

  console.log(event.state) //当前历史记录的state对象

}//注意大小写

触发条件: 点击前进后退按钮、调用back()、forward()、go()

个人思考: 对于pushState、replaceState无法触发它,可以从语义上理解,pop有弹出、提取出的意味,是从历史记录栈中提取出来,而pushState、replaceState分别是压入栈和改变元素,自然不会触发。

history新增方法的更多相关文章

  1. 谈谈HTML5中的history.pushSate方法,弥补ajax导致浏览器前进后退无效的问题

    移动端为了减少页面请求,有时候需要通过单页面做成多页面的效果,最近有这么个需求,表单填完后执行第一步,然后执行第二步,第二步执行完后再执行第三步,每一步都要保留之前的数据.这种情况用单页面实现再合适不 ...

  2. HTML5的新增方法

    json的新增方法: parse()   将JSON转换为字符串:必须是严格的JSON格式: 用法 : var s = {"name":"name"}; JSO ...

  3. Html5使用history对象history.pushState()和history.replaceState()方法添加和修改浏览历史记录

    根据网上参考自己做个笔记:参考网址:http://javascript.ruanyifeng.com/bom/history.html history.pushState() HTML5为histor ...

  4. JS window对象 History 对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能。语法: window.history.[属性|方法]

    History 对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能. 注意:从窗口被打开的那一刻开始记录,每个浏览器窗口.每个标签页乃至每个框架,都 ...

  5. ES6 - 基础学习(4): 模板字符串和字符串新增方法

    模板字符串 模板字符串:我理解为将字符串格式化.模板化,将字符串加强处理,此处的模板有动词的意思. 字符串模板基本格式: `xxxxxx`(前后都用反引号[tab键上面按键]引起来).除了作为普通字符 ...

  6. tp5 中 model 的新增方法

    //默认主键为自动识别,如果需要指定,可以设置属性: namespace app\index\model; use think\Model; class User extends Model { pr ...

  7. ES6对象的扩展及新增方法

    1.属性的简洁表示法 ES6允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; baz//{foo:'bar ...

  8. Java 8之Map新增方法<转>

    在Java 8中的Map.Entry接口中增加了comparingByKey, comparingByValue方法,它们都返回Comparator<Map.Entry<K,V>&g ...

  9. 【ES6 】ES6 字符串扩展及新增方法

    模板字符串 传统写法 var str = 'There are <b>' + basket.count + '</b> ' + 'items in your basket, ' ...

随机推荐

  1. Python高级特性(切片,迭代,列表生成式,生成器,迭代器)

    掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...

  2. 关于ajax的controller层返回jsp页面多个list

    @RequestMapping(value ="findFansChangeRate") @ResponseBody public AjaxJson findFansChangeR ...

  3. LNMP V1.4一键快速部署Let's Encrypt免费SSL证书

    老左年前在"军哥LNMP V1.4测试版一键脚本安装以及功能上的升级体验"已经简单的体验到目前还没有正式版本的V1.4版本,理论上会在今年儿童节正式上线.从体验和实际的版本变动文档 ...

  4. 1.RapidIO协议概述

    转自https://www.cnblogs.com/liujinggang/p/9925859.html 一.RapidIO背景介绍 RapidIO是由Motorola和Mercury等公司率先倡导的 ...

  5. LVM : 缩减文件系统的容量

    有扩展就有缩减,我们在前文<LVM : 扩展文件系统的容量>中介绍了通过 LVM 扩展文件系统的方法,本文我们接着前文的 demo 介绍通过 LVM 缩减文件系统的方法.说明:本文的演示环 ...

  6. github链接与心得体会

    https://github.com/wangyuefang/test 第一次使用github,我觉得github是一个非常人性化的软件,使用起来很方便.而且可以把GitHub作为免费的远程仓库,如果 ...

  7. 安装MySQL和其他包

    安装 MySQL 1. 下载 MySQL 安装包 记得要下载 msi 可执行文件,而不是源码包. https://dev.mysql.com/downloads/file/?id=474803 这个安 ...

  8. HDU 2071 Max Num

    http://acm.hdu.edu.cn/showproblem.php?pid=2071 Problem Description There are some students in a clas ...

  9. TortoiseSvn/Git的WaterEffect

    https://github.com/TortoiseGit/TortoiseGit/blob/master/src/Utils/MiscUI/WaterEffect.cpp C#的实现: http: ...

  10. js选择排序。

    <script> , , , , , , , ]; ; j<len; j++ ){ // 假设min为最小值 var minIndex = j; var min = arr[j]; ...