项目地址: https://github.com/browserstate/history.js

做wap端的时候,有些时候一个页面里有很多小页面或者标签,希望刷新浏览器或者按返回键的时候,能够被当成一个页面去处理。所以就去找html5是否提供这样的接口。

最后发现确实有这个接口,但兼容性 不好。

后来发现这个插件 history.js,可以兼容各大浏览器。 html4是使用Hash值进行兼容。所以在获取url 问好后面的值时,需要判断是否是兼容模式。

js中如果是hash兼容模式 window.location.hash 这个值是不为空,如果不是hash兼容模式 window.location.hash值为空。

history.js 提供的demo也很简单

(function(window,undefined){
// Bind to StateChange Event
History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
var State = History.getState(); // Note: We are using History.getState() instead of event.state
});
// Change our States
History.pushState({state:1}, "State 1", "?state=1"); // logs {state:1}, "State 1", "?state=1"
History.pushState({state:2}, "State 2", "?state=2"); // logs {state:2}, "State 2", "?state=2"
History.replaceState({state:3}, "State 3", "?state=3"); // logs {state:3}, "State 3", "?state=3"
History.pushState(null, null, "?state=4"); // logs {}, '', "?state=4"
History.back(); // logs {state:3}, "State 3", "?state=3"
History.back(); // logs {state:1}, "State 1", "?state=1"
History.back(); // logs {}, "Home Page", "?"
History.go(2); // logs {state:3}, "State 3", "?state=3"
})(window);

  初次看,压根没看懂是如何使用的。。。。

经过实践,特来解释下上边的代码

//History主要改变的问号后面的键值。。
//这个是向浏览历史压入一条新纪录
//记录为当前url且问号后面的值为 state=1,
//将一个{state:1}对象压入该链接中,供下面的历史事件触发时调用,
//State 1 为其新的标题 (即head title);
//这个动作会触发下面statechange 事件
History.pushState({state:1}, "State 1", "?state=1"); //改变当前url问好后面的值
//不触发statechange事件
//不增加历史记录
History.replaceState({state:3}, "State 3", "?state=3"); //前提是通过History.pushState 增加的历史记录。
// 向前跳或者向后跳都会出发这个事件,刷新不会
//State对象中的data就是 上面存入的对象 {state:3}
History.Adapter.bind(window,'statechange',function(){
var State = History.getState(); instead of event.state
});

所以无论是将一条url压入历史中、返回上一页、向前跳一页等等(不包括刷新和原来的历史记录),都会触发statechange事件。 剩下的自己发挥。

原先我不知道压入的时候会触发,后面调试的时候才发现,也会。 这是个坑。。。

关于history.js的使用的更多相关文章

  1. pjax 历史管理 jQuery.History.js

    更新 http://www.bootcdn.cn/jquery.pjax/ 简介 pjax是一个jQuery插件,使用ajax和pushState技术提供快速的浏览体验与真正的永久链接.网页标题.以及 ...

  2. history.js 一个无刷新就可改变浏览器栏地址的插件(不依赖jquery)

    示例: http://browserstate.github.io/history.js/demo/     简介   HTML4有一些对浏览历史的前进后退API的支持如:   window.hist ...

  3. 使用history.js解决浏览器对history使用的兼容问题

    history.js即可以解决禁止浏览器回退的浏览器兼容问题,也能解决直接修改浏览器当前标签页url的浏览器兼容问题. 解决禁止浏览器回退: <script src="../../js ...

  4. 三、npm start报错:./node_modules/history/esm/history.js解决办法

    package.json中的roadhog换为:'^2.5.0-beta.4',删除node_modules文件夹,在执行npm install,npm start.

  5. js pjax 和window.history.pushState,replaceState

    原文:http://blog.linjunhalida.com/blog/pjax/ github:https://github.com/defunkt/jquery-pjax 什么是pjax? 现在 ...

  6. 禁止页面后退JS(兼容各浏览器)

    <script src="${ctxPath}/media/lib/jquery.history.js"></script> <script> ...

  7. js获取cookie中存储的值

    最近看了试卷题目发现自己会的十分的匮乏, 第一题就把自己难住了,知道有这个东西,但是实际上没有操作过. ========================================= cookie ...

  8. 使用HTML5的History API

    HTML5 History API提供了一种功能,能让开发人员在不刷新整个页面的情况下修改站点的URL.这个功能很有用,例如通过一段JavaScript代码局部加载页面的内容,你希望通过改变当前页面的 ...

  9. chrome源码学习之:js与底层c++的通信

    以查询历史记录为例: 1.在上层history.js中通过chrome.send()来向底层发送事件请求和相关参数,其中'queryHistory'为信号名称,[this.searchText_, t ...

随机推荐

  1. 多线程下的for循环问题

    List<int> _ValueLis = new List<int>(); private void AddInt(int i) { _ValueLis.Add(i); } ...

  2. Delphi: 有关Form处理 :需要调用的时候进行调用。

    if not Assigned(frmAppServer) then frmAppServer := TfrmAppServer.Create(Application); frmAppServer.S ...

  3. React之事件绑定、列表中key的使用

    在学习React的Hadding Events这一章节,发现事件回调函数的几种写法,看似区别不大,但实际差异还是蛮大的. class Toggle extends React.Component{ c ...

  4. Spring MVC 3.0 深入及对注解的详细讲解

    核心原理 1.       用户发送请求给服务器.url:user.do 2.       服务器收到请求.发现Dispatchservlet可以处理.于是调用DispatchServlet. 3.  ...

  5. Scala深入浅出实战经典-----002Scala函数定义、流程控制、异常处理入门实战

    002-Scala函数定义.流程控制.异常处理入门实战 Scala函数定义 语句结束无分号 定义无参函数 def 函数名称(参数名称:参数类型)[:Unit=]{ 函数体 } 老师的代码 我的实际代码 ...

  6. AngularJs的UI组件ui-Bootstrap分享(十一)——Typeahead

    Typeahead指令是一个用于智能提示或自动完成的控件,就像Jquery的AutoComplete控件一样.来看一个最简单的例子: <!DOCTYPE html> <html ng ...

  7. Java在JFinal中出现Can not create instance of class: com.keesail.web.config.WebConfig异常处理方式

    编译的时候一直出现如下问题: 后面 查了许多资料 说是build项目的时候web.xml没有输出到class目录.后面试了很多方式不行.后面自己摸索出如下方式解决问题: 改成默认输出目录.

  8. 今天第一节PS课

  9. UI数据库

    一.数据库 SQL: SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集, 是一种功能齐全的数据库语言. 二.数据库管理系统 数据 ...

  10. python基础之模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合. 而对于一个复杂的功能来,可能需要多个函数 ...