by zhangxinxu from http://www.zhangxinxu.com
本文地址:http://www.zhangxinxu.com/wordpress/?p=3432html
三点:html5
精力老是有限的,昨天一冲动,在上海浦东外环以外订了个90米的房子,要借钱筹首付、贷款和领证什么的。HTML5 history相关知识点啪啦啪啦讲起来也是一条又臭又长的裹脚布,精气神实在不够用,这里,直接一个实例。ajax
众所周知,Ajax能够实现页面的无刷新操做——优势;可是,也会形成另外的问题,没法前进与后退!曾几什么时候,Gmail彷佛借助iframe搞定,现在,HTML5让事情变得如同过家家般简单。api
当执行Ajax操做的时候,往浏览器history
中塞入一个地址(使用pushState
)(这是无刷新的);因而,返回的时候,经过URL或其余传参,咱们就能够还原到Ajax以前的模样。浏览器
本demo所展现的就是ajax的内容载入与地址栏的前进与后退,典型应用,对于熟悉相关知识点颇有帮助。wordpress
您能够狠狠地点击这里:HTML5 history API与ajax分页实例搜索引擎
demo结构大体以下:左边导航菜单,右侧详细内容。 code
若是咱们想偷懒,导航直接URL地址,点击刷新得了。但头尾内容都是同样的,刷新总显得浪费。从体验上讲,点击导航,右侧Ajax局部刷新是更优的策略。htm
Ajax局部刷新小菜,稍有经验都能轻松应对。如今若是提出以下需求:每次ajax刷新就若是页面刷新同样,能够后退查看以前内容,怎么破?blog
个人策略以下:
?
后面的)附在demo HTML页面地址后面,使用history.pushState
塞到浏览器历史中。 window.onpopstate
事件,经过绑定popstate
事件,就能够根据当前URL地址中的查询内容让对应的菜单执行Ajax载入,实现Ajax的前进与后退效果。 history.replaceState
更改当前的浏览器历史,而后触发Ajax操做。因而,你会看到:
.html
,可是,实际URL最后是: 由于被history.replaceState
摆了一道。
由于历史记录被history.pushState
插了一刀。
奇迹般的,页面无刷新的,又回到了浦东菜单:
由于window.onpopstate
让菊花刀又拔了出来。
history.pushState({}, "页面标题", "xxx.html");
history.replaceState(null, "页面标题", "xxx.html");
window.addEventListener("popstate", function() { var currentState = history.state; /* * 该干吗干吗 */ });
浏览器兼容性表:
Feature
Chrome
Firefox (Gecko)
Internet Explorer
Opera
Safari
replaceState, pushState
5
4.0 (2.0)
10
11.50
5.0
history.state
18
4.0 (2.0)
10
11.50
6.0
恩,就这些!