HTML5 history.pushState()和history.replaceState()新增、修改历史记录用法介绍

抽空研究了下这两个新方法,确实可以解决很多问题

1、使用pushState()方法 可以控制浏览器自带的返回按钮:

有时候我们想让用户点击浏览器返回按钮时,不返回,或执行其他操作,这时,就用到history.pushState()方法

讲解:

history.pushState(data,title,url) //每执行一次都会增加一条历史记录,浏览器在返回时,就不会返回前一个页面了,

data:要设置的history.state的值,可以是任意类型的值,可根据此值进行判断执行想要的操作。

title:现在大多数浏览器不支持或者忽略这个参数,最好用null代替。

url:地址栏的值,若不需要可用空来代替。

// 监听浏览器的前进后退事件:

     window.addEventListener("popstate", function() {
        // 取出 设置好的 history.state 值,做判断

     });

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <button class="btn" onclick="btnFun();">点击新增一条历史记录</button>
    </div>
    <script>
        console.log(‘增加历史记录前 state的值:‘,history.state); // null
function btnFun() {//点击事件
// 增加一个历史记录
history.pushState(‘a‘,null,‘2.html?b=1‘);
            console.log(‘增加历史记录后 state的值:‘,history.state); // a
};
        window.addEventListener(‘popstate‘,function() {
            var state = history.state;//取出state值
//注意:在此处时(点击后退按钮时),state的值已经为null
            // (因为返回时历史记录会被删除,浏览器动作)
console.log(‘点击后退按钮后 state的值:‘,state); // null
            //判断,想要执行的操作
});
    </script>
</body>
</html>

2、history.replaceState() 与pushState()功能类似,除了这点:

replaceState()是用来修改当前的历史记录(history实体),而不是创建一个新的历史记录,所以,当执行完history.replaceState()后,点击返回按钮照样会返回上一个一面。  当需要更新一个state对象或者当前history实体时,可以用replaceState()来实现。

用法:当在a页面使用replaceState()修改了历史记录后,跳转到b页面,后退到a页面时,历史记录就是修改过的。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <button class="btn" onclick="btnFun();">点击修改本页历史记录</button>
    </div>
    <br/>
    <div>
        <a href="b.html">点击跳转到b页面</a>
    </div>
    <script>

        function btnFun() {//点击事件
history.replaceState(‘a‘,null,‘a.html?a=1‘);
            console.log(‘修改历史记录后 state的值:‘,history.state); // a
};
    </script>
</body>
</html>

点击跳转到b页面后 ,执行返回操作

回到a页面,url中?a=1还存在,我们可以利用这个参数在页面中执行一些操作,比如列表的选中

可以将系统的api二次封闭提高易用性

原文地址:https://www.cnblogs.com/lguow/p/9222272.html

时间: 2024-07-31 18:05:25

HTML5 history.pushState()和history.replaceState()新增、修改历史记录用法介绍的相关文章

ajax与HTML5 history pushState/replaceState实例

一.本文就是个实例展示 三点: 我就TM想找个例子,知道如何个使用,使用语法什么的滚粗 跟搜索引擎搞基 自己备忘 精力总是有限的,昨天一冲动,在上海浦东外环之外订了个90米的房子,要借钱筹首付.贷款和领证什么的.HTML5 history相关知识点啪啦啪啦讲起来也是一条又臭又长的裹脚布,精气神实在不够用,这里,直接一个实例. 二.ajax载入与浏览器历史的前进与后退 众所周知,Ajax可以实现页面的无刷新操作——优点:但是,也会造成另外的问题,无法前进与后退!曾几何时,Gmail似乎借助ifra

html5 history.pushState+ajax 实现无刷新,浏览器地址栏title修改

1 <html> 2 <body> 3 <script> 4 var total=""; 5 for (var i=0;i<1000000;i++) 6 { 7 total= total+i.toString (); 8 history.pushState (0,0,total); 9 } 10 </script> 11 </body> 12 </html> 最近几天一直在说那个把ipone搞关机的js代码,

history.replaceState 和 history.pushState的使用和注意事项 ------------黄丕巧

HTML5引入了history.pushState()和history.replaceState()这两个方法,他们允许添加和修改history实体.同时,这些方法会和window.onpostate事件一起工作. replaceState是替换当前的历史信息,pushState是添加一条新的历史记录 这两个方法有三个参数(state,title,url): 第一个参数是一个json格式的参数,他可以存储我们在当前历史以后会用到的数据,也可以传null:第二个官方的介绍是说页面的标题,不过暂时用

使用history.pushState()和popstate事件实现AJAX的前进、后退功能

上一篇文章中,我们使用location.hash来模拟ajax的前进后退功能.使用location.hash存在下面几个问题: 1.使用location.hash会导致地址栏的url发生变化,用户体验不够友好. 2.location.hash产生的历史记录无法修改,每次hash改变都会导致产生一个新的历史记录. 3.location.hash只是1个字符串,不能存储很多状态相关的信息. 为了解决这些问题,HTML5中引入了history.pushState().history.replaceSt

HTML5学习笔记之History API

这系列文章主要是学习Html5相关的知识点,以学习API知识点为入口,由浅入深的引入实例,让大家一步一步的体会"h5"能够做什么,以及在实际项目中如何去合理的运用达到使用自如,完美驾驭O(∩_∩)O~ 先出一道题目:以下不是HTML5新增的API是 http://hovertree.com/tiku/bjaf/pic2kvcg.htm 一,开篇分析 好了,废话不多说,直接进入今天的主题,今天主要讲的是“History API”及在单页应用中的作用,并且会引入一个实际的例子做为讲解的原型

通过history.pushState无刷新改变url

背景 在浏览器中改变地址栏url,将会触发页面资源的重新加载,这使得我们可以在不同的页面间进行跳转,得以浏览不同的内容.但随着单页应用的增多,越来越多的网站采用ajax来加载资源.因为异步加载的特性,地址栏上的资源路径没有被改变,随之而来的问题就是页面的状态无法被保存.这导致我们难以通过熟悉的方式(点击浏览器前进/后退按钮),在前后的页面状态间进行切换. 为了解决ajax页面状态不能返回的问题,人们想出了一些曲线救国的方法,比如利用浏览器hash的特性,将新的资源路径伪装成锚点,通过onhash

使用ajax和history.pushState无刷新改变页面URL

表现 如果你使用chrome或者firefox等浏览器访问本博客.github.com.plus.google.com等网站时,细心的你会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变.并且能够很好的支持浏览器前进和后退. 是什么有这么强大的功能呢? HTML5里引用了新的API,history.pushState和history.replaceState,就是通过这个接口做到无刷新改变页面URL的. 与传统的AJAX的区别 传统的ajax有如下的问题: 1.可以无刷新

使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="keywords" content="周记[学校晚会篇]" /><meta name="description

window.history.pushState与ajax实现无刷新更新页面url

ajax能无刷新更新数据,但是不能更新url HTML5的新API: window.history.pushState, window.history.replaceState 用户操作history,点击前进后退按钮会触发popstate事件. 这些方法可以协同window.onpopstate事件一起工作. 改变url的demo 本页是foo.html,url改变成bar.html,内容却不变 <!DOCTYPE html> <html> <head> <me