记 history.replaceState方法一次应用 解决单页面应用刷新切换页面问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记 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
以上是关于记 history.replaceState方法一次应用 解决单页面应用刷新切换页面问题的主要内容,如果未能解决你的问题,请参考以下文章
history.pushstate和history.replacestate的区别
IOS 11.1 SecurityError (DOM Exception 18): 阻止尝试使用 history.replaceState() 更改会话历史 URL
如何检测何时使用 history.pushState 和 history.replaceState? [复制]
替换 window.history.replaceState 中的值而不是添加到其中