ajax是一个很是好玩的小东西,不过用起来也会存在一些问题。html
咱们能够利用ajax进行无刷新改变文档内容,可是没办法去修改URL,即没法实现浏览器的前进与后退、书签的收藏功能。html5
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
在HTML4,Histroy对象有下面属性方法:浏览器
在HTML5中,新增了两个方法:服务器
查看张鑫旭大神写的例子。
具体场景实用解析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 |
并非页面中全部的连接都须要使用PJAX加载,全部在须要这个东西的a标签上加一个属性,如data-pjax=true,而后统一添加事件。