2019独角兽企业重金招聘Python工程师标准>>>

最近抽空研究了html5 history,并写了个小测试,由于只在前端展示,我把对于ajax的处理换为了简单的JS事件,直接复制代码,可以在静态页面查看。

一、基本操作

// 浏览器后退

  1. window.history.back();
  2. window.history.go(-1);

// 浏览器前进

  1. window.history.forward();
  2. window.history.go(1);

// 浏览器刷新

  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不能加入历史记录的问题相关推荐

  1. ajax与HTML5 history pushState/replaceState实例

    一.本文就是个实例展示 三点: 我就TM想找个例子,知道如何个使用,使用语法什么的滚粗 跟搜索引擎搞基 自己备忘 精力总是有限的,昨天一冲动,在上海浦东外环之外订了个90米的房子,要借钱筹首付.贷款和 ...

  2. 巧用Html5 History Api解决SPA的SEO问题

    背景 想当年,我做了一个新媒体网站项目(AIISPO,已下线).跟普通资讯网站不一样的是,老板要求PC端前台的文章阅读模式一定得是瀑布流+模态框.瀑布流指的是以瀑布流的形式将文章罗列出来,而模态框则指 ...

  3. html5 history api_window.history的跳转探索

    浏览器的跳转的本质是什么,历史记录是如何运作的,在spa应用中是如何进行决策的? 简介 window.history是用来保存用户在一个会话期间的网站访问记录,并提供了相应的方法进行查询,相关属性,方 ...

  4. Html5 History API解析

    浏览器前进与回退操作 在传统的浏览器中我们只能通过调用window.history对象的 forward() . back() 或 go(number|url) 方法来进行页面的前进.回退或跳转到某一 ...

  5. html5 history微信浏览器返回不刷新

    History API与浏览器历史堆栈管理: 移动端开发在某些场景中有着特殊需求,如为了提高用户体验和加快响应速度,常常在部分工程采用SPA架构.传统的单页应用基于url的hash值进行路由,这种实现 ...

  6. html5通html5通,HTML5 history详解

    HTML5 history以及hash的应用,支持history时使用history模式 下面详细学习了一下常用的history相关的API 常用API: 1.history.length: 返回当前 ...

  7. addeventlistener监听ajax请求_基于h5的history改善ajax列表请求体验

    信息比较丰富的网站通常会以分页显示,在点"下一页"时,很多网站都采用了动态请求的方式,避免页面刷新.虽然大家都是ajax,但是从一些小的细节还是 可以区分优劣.一个小的细节是能否支 ...

  8. ajax 没有权限 -quot;跨域quot;,如何解决AJAX中跨域访问出现'没有权限'的错误

    如何解决AJAX中跨域访问出现'没有权限'的错误 很多人在使用AJAX调用别人站点内容的时候,JS会提示"没有权限"错误,这是XMLHTTP组件的限制-安全起见 禁止访问非同域的网 ...

  9. php 返回字符串给aja,解决ajax异步请求返回的是字符串问题

    1.返回结果差异 js获取后打印res.code无结果.因为返回数据格式不正确. php文件添加header头: header('Content-Type:application/json;'); 或 ...

最新文章

  1. 用java编写一个函数,统计一个字符串中每个字母出现的次数
  2. nginx 配置并发数限制
  3. 【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树
  4. Edge浏览器开发人员工具
  5. java基础教程哪个好,面试必会
  6. Java技术学习笔记:C/S 与B/S 区别
  7. Singularity将本地SIF文件,转成sandbox
  8. Ajax 滚动异步加载数据
  9. 《Flutter 从0到1构建大前端应用》读后感—第9章【插件与混合工程】
  10. python3.1415926_Python3中操作字符串str必须记住的几个方法
  11. ASP.NET第三方控件网站
  12. 扫码点菜系统代码_一顿火锅吃出474万天价?扫码点餐时,千万不要这样做
  13. Hadoop大数据平台搭建(超详细步骤)
  14. SSM网上超市购物商城管理系统、
  15. reviewboard升级
  16. 腾讯笔试题之数字转换机
  17. eclipse官方下载安装、JDK官方下载安装和环境变量配置
  18. Moss 2007入门--功能概述
  19. Web漏洞扫描工具(批量脱壳、反序列化、CMS)
  20. Python实现对中文文本分句

热门文章

  1. linux 日志优化,Linux —— 日志管理和优化方式
  2. python数组写入txt
  3. python2.7使用TimeDelta中total_seconds()方法的问题
  4. 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数
  5. AngularJs 入门系列-1 使用 AngularJs 搭建页面基本框架
  6. Redis实现分布式锁2
  7. 记一次Ubuntu安装nodeJs过程
  8. spring component-scan配置扫描多个包
  9. jquery1.8.3和1.11.3的用法区别
  10. 使用Samba构建工程