html5 history解决ajax不能加入历史记录的问题
2019独角兽企业重金招聘Python工程师标准>>>
最近抽空研究了html5 history,并写了个小测试,由于只在前端展示,我把对于ajax的处理换为了简单的JS事件,直接复制代码,可以在静态页面查看。
一、基本操作
// 浏览器后退
- window.history.back();
- window.history.go(-1);
// 浏览器前进
- window.history.forward();
- window.history.go(1);
// 浏览器刷新
- window.history.go(0);
二、history方法
1、history.pushState()
pushState(state,title,url)方法有三个参数;
state(第一个参数):放入需要保存在历史记录的数据,以对象形式封装;
title (第二个参数):目前可以忽略,基本不需要;
url (第三个参数) :添加在原始url地址的尾缀,可以问号隔开原始url,问号与其后参数便是此处值
2、history.replaceState()
替换当前页的历史记录,用法与 pushState 相同;
注:如果只替换数据,则第三个值不需要
3、popstate
每当活动的历史记录项发生变化(pushState或者replaceState)时,popstate事件都会被传递给window对象,尔后浏览器操作时读取的便是改变后的值;
注:记得还要在popstate里面写入对数据的处理,浏览器才会正常展示之前看到的页面;
4、window.onpopstate()
当浏览器操作(前进/后退)时,会触发 window.onpopstate() 事件,从window的历史记录调取数据;
三、简单的例子
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title></head><style>div{position: fixed;top: 100px;font-size: 22px;}</style><body><div id="text">这是第0个页面</div><button onclick="change(this)" page="0">点击变化</button><button onclick="change(this)" page="1">点击变化</button><button onclick="change(this)" page="2">点击变化</button><button onclick="change(this)" page="3">点击变化</button><script>var obj={}; function url_deal(){
// 获取url,模拟后台解码传递数据var url = window.location.href,_page = url.split("?")[1].split("&");_page.map(function(str){var arr = str.split("=");obj[arr[0]] = arr[1] })return obj }url_deal();var value = ["这是第0个页面","这是第1个页面","这是第2个页面","这是第3个页面", ];
// 数据处理 document.getElementById("text").innerHTML = value[obj.page||0];
// 替换当前页面的历史记录并存入数据history.replaceState({text:document.getElementById("text").innerHTML}, '');
// console.log(obj)</script><script> function change(_self){
// _self.getAttribute("page") 为button内 page属性的值url_deal();//重新获取url并解码// 备注:这里可以换为请求ajax获取数据 var text1 = "这是第"+_self.getAttribute("page")+"个页面";document.getElementById("text").innerHTML = text1;// history.pushState是给浏览器添加历史记录,可以把需要保存的值放入history.state(第一个参数)里面(数据放入历史记录)if(obj.page && obj.page == _self.getAttribute("page")){
// 判断如果当前页面与要请求的页面是同一个则调用浏览器刷新window.location.reload();return;}else if(!obj.page && "0" == _self.getAttribute("page")){window.location.reload();return;}// 获取的数据放入pushState后的第一个参数内 这里的例子为:{text:text1} history.pushState({text:text1}, '', '?page='+_self.getAttribute("page"));obj = {}//清空内容,便于下次的填入数据}
// popstate,当浏览器变化(前进、后退、刷新)时运行window.addEventListener("popstate", function() {
// history.state指向上面history.pushState的第一个值
// 前进/后退/刷新的时候,可以引入这里的数据var result = history.state;
// 这里要对存入的数据进行处理,在需要的位置填入相应的数据,才会正常展示保存时的界面document.getElementById("text").innerHTML = result.text;});</script></body>
</html>
转载于:https://my.oschina.net/u/3797834/blog/1800981
html5 history解决ajax不能加入历史记录的问题相关推荐
- ajax与HTML5 history pushState/replaceState实例
一.本文就是个实例展示 三点: 我就TM想找个例子,知道如何个使用,使用语法什么的滚粗 跟搜索引擎搞基 自己备忘 精力总是有限的,昨天一冲动,在上海浦东外环之外订了个90米的房子,要借钱筹首付.贷款和 ...
- 巧用Html5 History Api解决SPA的SEO问题
背景 想当年,我做了一个新媒体网站项目(AIISPO,已下线).跟普通资讯网站不一样的是,老板要求PC端前台的文章阅读模式一定得是瀑布流+模态框.瀑布流指的是以瀑布流的形式将文章罗列出来,而模态框则指 ...
- html5 history api_window.history的跳转探索
浏览器的跳转的本质是什么,历史记录是如何运作的,在spa应用中是如何进行决策的? 简介 window.history是用来保存用户在一个会话期间的网站访问记录,并提供了相应的方法进行查询,相关属性,方 ...
- Html5 History API解析
浏览器前进与回退操作 在传统的浏览器中我们只能通过调用window.history对象的 forward() . back() 或 go(number|url) 方法来进行页面的前进.回退或跳转到某一 ...
- html5 history微信浏览器返回不刷新
History API与浏览器历史堆栈管理: 移动端开发在某些场景中有着特殊需求,如为了提高用户体验和加快响应速度,常常在部分工程采用SPA架构.传统的单页应用基于url的hash值进行路由,这种实现 ...
- html5通html5通,HTML5 history详解
HTML5 history以及hash的应用,支持history时使用history模式 下面详细学习了一下常用的history相关的API 常用API: 1.history.length: 返回当前 ...
- addeventlistener监听ajax请求_基于h5的history改善ajax列表请求体验
信息比较丰富的网站通常会以分页显示,在点"下一页"时,很多网站都采用了动态请求的方式,避免页面刷新.虽然大家都是ajax,但是从一些小的细节还是 可以区分优劣.一个小的细节是能否支 ...
- ajax 没有权限 -quot;跨域quot;,如何解决AJAX中跨域访问出现'没有权限'的错误
如何解决AJAX中跨域访问出现'没有权限'的错误 很多人在使用AJAX调用别人站点内容的时候,JS会提示"没有权限"错误,这是XMLHTTP组件的限制-安全起见 禁止访问非同域的网 ...
- php 返回字符串给aja,解决ajax异步请求返回的是字符串问题
1.返回结果差异 js获取后打印res.code无结果.因为返回数据格式不正确. php文件添加header头: header('Content-Type:application/json;'); 或 ...
最新文章
- 用java编写一个函数,统计一个字符串中每个字母出现的次数
- nginx 配置并发数限制
- 【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树
- Edge浏览器开发人员工具
- java基础教程哪个好,面试必会
- Java技术学习笔记:C/S 与B/S 区别
- Singularity将本地SIF文件,转成sandbox
- Ajax 滚动异步加载数据
- 《Flutter 从0到1构建大前端应用》读后感—第9章【插件与混合工程】
- python3.1415926_Python3中操作字符串str必须记住的几个方法
- ASP.NET第三方控件网站
- 扫码点菜系统代码_一顿火锅吃出474万天价?扫码点餐时,千万不要这样做
- Hadoop大数据平台搭建(超详细步骤)
- SSM网上超市购物商城管理系统、
- reviewboard升级
- 腾讯笔试题之数字转换机
- eclipse官方下载安装、JDK官方下载安装和环境变量配置
- Moss 2007入门--功能概述
- Web漏洞扫描工具(批量脱壳、反序列化、CMS)
- Python实现对中文文本分句
热门文章
- linux 日志优化,Linux —— 日志管理和优化方式
- python数组写入txt
- python2.7使用TimeDelta中total_seconds()方法的问题
- 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数
- AngularJs 入门系列-1 使用 AngularJs 搭建页面基本框架
- Redis实现分布式锁2
- 记一次Ubuntu安装nodeJs过程
- spring component-scan配置扫描多个包
- jquery1.8.3和1.11.3的用法区别
- 使用Samba构建工程