记 history.replaceState方法一次应用 解决单页面应用刷新切换页面问题

恩,以前就知道history api 新加了几个方法但是没怎么研究过,今天碰到了一个小问题,用history完美解决了,很兴奋,记录下

首先说下我遇到的问题场景:

现在有两个页面 A,B

A页面时提交信息页面 B页面是结果页

并且 A,B 页面是同一个html文件内用 js 模板 动态渲染的,

那么当结果页面动态渲染出来以后,每次刷新就会显示A页面,其实,我更想显示B页面对吧,肯定不想让用户再次提交一次,而且大多数情况下我其实并不希望用户直接进入提交信息页面的,因为如果是支付的话,会造成二次支付,

而且在逻辑上也是有错误的,我在A页面刷新,你还应该让我在A页面才对,为什么显示B页面????

那么这个时候就是replaceState大显身手的时候了。


                var stateObject = { result: true }; //可以传递参数
                var title = "Wow Title";
                var newUrl = location.href;
                history.replaceState(stateObject, ‘‘, newUrl);
                console.info(‘history‘, history);

中间的title 传空,因为现在大多数浏览器都选择忽略了它== ,
stateObject 是传递的参数

可以用 history.state直接获取到

那么这样事情就变得简单了,在渲染B页面的时候替换掉A页面的连接,其实这个例子中只是传递了一个result参数,那么当页面刷新的时候只要检测到result 这个参数为true 即直接显示结果页。而且当用户点击浏览器回退按钮的时候也不会再返回到A页面,避免再次提交。

也许vue react 单页面应用也可以用这种方式来实现,先记个引子,有时间可以尝试下。

可能这个例子比较抽象,有时间整个完整的demo

附上 history api 官网说明地址吧

https://developer.mozilla.org/zh-CN/docs/Web/API/History

原文地址:https://blog.51cto.com/13496570/2416791

时间: 2024-11-09 13:41:50

记 history.replaceState方法一次应用 解决单页面应用刷新切换页面问题的相关文章

菜鸟解决“子页面关闭刷新父页面局部”问题的历程

引子 昨天晚上做一个项目,遇到的一个问题,这个项目是一个在线考试系统,新建一份试卷的页面,要添加一些试题策略.点击添加试题策略,弹出添加策略的页面,策略编辑好之后提交,添加策略页关闭,当前添加试题页面策略列表刷新.那么就遇到一个问题,在“添加试卷页”中点击“添加策略”按钮弹出添加策略页,添加策略后,父页面只能局部刷新(整体刷新会丢掉页面输入框未保存的数据). 综上总结,浓缩成一句话啊,就是“父页面打开子页面,子页面完成操作后触发父页面的事件.” 过程 我在百度和必应里面搜一下,很多解决方案是用w

HTML5 API——无刷新更新地址 history.pushState/replaceState 方法

尽 管是上面讲到的<JavaScript高级程序设计>(第二版)中提到,BOM中的location.path/query…… (window.location)在通过JavaScript更改以后,浏览器都会通过刷新来到达你更改后的URL(location的意思就是位 置..) 而在JavaScript MVC开始流行之后,通过刷新来修改URL的方法,不禁让人感到烦躁.然而HTML5中就制定了一个这样的API,可以通过方法的方式来修改URL,而又不会使浏览器刷新,就是History API. 熟

【转】HTML5 API——无刷新更新地址 history.pushState/replaceState 方法

(window.location)在通过JavaScript更改以后,浏览器都会通过刷新来到达你更改后的URL(location的意思就是位 置..) 而在JavaScript MVC开始流行之后,通过刷新来修改URL的方法,不禁让人感到烦躁.然而HTML5中就制定了一个这样的API,可以通过方法的方式来修改URL,而又不会使浏览器刷新,就是History API. 熟悉JavaScript开发的同学,对History肯定不会陌生,其中最经典的方法就是go,通过第一个类型为整数的传输参数,可以使

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

抽空研究了下这两个新方法,确实可以解决很多问题 1.使用pushState()方法 可以控制浏览器自带的返回按钮: 有时候我们想让用户点击浏览器返回按钮时,不返回,或执行其他操作,这时,就用到history.pushState()方法 讲解: history.pushState(data,title,url) //每执行一次都会增加一条历史记录,浏览器在返回时,就不会返回前一个页面了, data:要设置的history.state的值,可以是任意类型的值,可根据此值进行判断执行想要的操作. ti

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

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

【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添加进工作的build path.3.(关键的一步)将lib设为源文件夹.如果不设置,则程序编译可以通过,但运行的时候,会报: java.lang.NoClassDefFoundError # re: Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundErro

PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)

记得高中时候做过游戏私服,那时候的游戏主页是用PHP写的,因为文件很固定,客户端,登陆器和一些小工具,文件数目也不是很多,所以都是直接把下载链接写死的,直接链接到本地服务器的文件目录,今天QQ群有个朋友突然问我用文件流做PHP下载功能,顺手写了个小Demo,代码很简单,注释也全,直接上代码吧~ 1.flush — 刷新输出缓冲 2.ob_clean — 清空(擦掉)输出缓冲区 此函数用来丢弃输出缓冲区中的内容. 此函数不会销毁输出缓冲区,而像 ob_end_clean() 函数会销毁输出缓冲区.

history replaceState/pushState

HTML5 history新增了两个属性,分别是replaceState()和pushState(),不刷新页面改变页面的url. replaceState()可以不让页面刷新的情况下改变url 用法:history.replaceState("data","页面的title","变化后的url") <body> <input type="button" value="按钮" id=&qu

Win7中右下角“小喇叭”声音图标消失的解决方法?(已解决)

1.打开任务管理器. 2.右键explorer.exe选择右键结束. 3.在按ctrl+shift+Esc,或者用alter+tab切换到任务管理器. 4.文件--新建任务,输入explorer.exe,这就恢复了. Win7中右下角"小喇叭"声音图标消失的解决方法?(已解决)