几种方法实现ajax请求内容时使用浏览器后退和前进功能

ajax是一个很是好玩的小东西,不过用起来也会存在一些问题。html

咱们能够利用ajax进行无刷新改变文档内容,可是没办法去修改URL,即没法实现浏览器的前进与后退、书签的收藏功能。html5

利用location的hash部分和使用window.onhashchange来实现

hash就是uri中#及后面的部分,例如:www.google.com.hk#123的#123。当只有hash部分发生变化时,浏览器的历史记录会产生记录,但不会向服务器发出请求,这时按后退键地址栏的uri会变化但页面内容不变。jquery

经过window.onhashchange事件来监听hash值的更改。git

ie六、7均不支持onhashchange,但能够用setInterval按期检查hash的改变,或者onload中检查的方法github

曾今经典场景:Gmail借助ifram和hash实现前进和后退功能ajax

而这样的方式对搜索引擎是十分不友好的,twitter和google约定使用hash bang (#!xxx),也就是hash后面的第一个字符为感叹号,这样的网址他们是会爬取的,可是其余搜索引擎不支持。api

html5的history

在HTML4,Histroy对象有下面属性方法:浏览器

  • length:历史堆栈中的记录数。
  • back():返回上一页。
  • forward():前进到下一页。
  • go([delta]):delta是个数字,若是不写或为0,则刷新本页;若是为正数,则前进到相应数目的页面;若为负数,则后退到相应数目的页面。

在HTML5中,新增了两个方法:服务器

  • pushState(data, title [, url]):往历史堆栈的顶部添加一条记录。data为一个对象或null,它会在触发window的popstate事件(window.onpopstate)时,做为参数的state属性传递过去;title为页面的标题,但当前全部浏览器都忽略这个参数;url为页面的URL,不写则为当前页。
  • replaceState(data, title [, url]):更改当前页面的历史记录。参数同上。这种更改并不会去访问该URL。

查看张鑫旭大神写的例子
具体场景实用解析http://www.cnblogs.com/accordion/p/5699372.html#topmarkdown

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
replaceState, pushState 5 4.0 (2.0) 10 11.50
history.state 18 4.0 (2.0) 10 11.50

3、开源的PJAX库

并非页面中全部的连接都须要使用PJAX加载,全部在须要这个东西的a标签上加一个属性,如data-pjax=true,而后统一添加事件。

相关文章
相关标签/搜索