·您当前的位置:主页 > 技术教程 > Html5技术 >

[html5]API详解15:History API 不刷新也可以跳转页面

时间:2017-03-07 11:34web前端教程
history这个东西大家应该都不陌生,我们经常使用history.back(-1)来实现后退功能,具体的属性和方法如下

HTML4中的History API

history这个东西大家应该都不陌生,我们经常使用history.back(-1)来实现后退功能,具体的属性和方法如下:

属性

  1. length 历史的项数。JavaScript所能管到的历史被限制在用浏览器的“前进”“后退”键可以去到的范围。本属性返回的是“前进”和“后退”两个按键之下包含的地址数的和。

方法

  1. back() 后退,跟按下“后退”键是等效的。

  2. forward() 前进,跟按下“前进”键是等效的。

  3. go() 用法:history.go(x);在历史的范围内去到指定的一个地址。如果 x < 0,则后退 x 个地址,如果 x > 0,则前进 x 个地址,如果 x == 0,则刷新现在打开的网页。history.go(0) 跟 location.reload() 是等效的。

html5中的History API

  1. history.pushState(data, title , url):往历史记录堆栈顶部添加一条记录;data会在onpopstate事件触发时作为参数传递过去;title为页面标题,当前所有浏览器都会忽略此参数;url为页面地址,可选,缺省为当前页地址。

  2. history.replaceState(data, title , url) :更改当前的历史记录,参数同上。

  3. history.state:用于存储以上方法的data数据,不同浏览器的读写权限不一样。

为什么要使用History API

在ajax给我们带来提高用户体验、减少HTTP连接数等好处的同时,也渐渐显露出一些不足之处,比如:

  1. 无法使用浏览器的前进、后退来切换前后数据。

  2. 当我们将浏览器地址栏中的链接与朋友分享时,可能实际上却并非我们期望的内容。

  3. 单纯地使用AJAX不利于搜索引擎优化。

 

浏览器兼容性

pushState, replaceState 5 4.0(2.0) -- 11.50 5.0
history.state -- 4.0(2.0) -- 11.50 --
 

案例代码:

<div class="container">

<div class="row">

<ul class="nav navbar-nav">

<li><a href="home.html" class="historyAPI">Home</a></li>

<li><a href="about.html" class="historyAPI">About</a></li>

<li><a href="contact.html" class="historyAPI">Contact</a></li>

</ul>

</div>

<div class="row">

<p>点击链接,ajax修改下面内容</p>

<p id="content"></p>

</div>

</div>

 

//检测浏览器是否支持history API

if(window.history && history.pushState){

alert('支持');

}else{

alert('不支持');

}

$('.historyAPI').on('click', function(e){

//阻止a标签默认跳转行为

e.preventDefault();

//获取新的href

var href = $(this).attr('href');

//根据新的href去执行的对应的操作,一般是用ajax进行内容刷新

$('#content').html('当前页面href是:/redbag/'+href);

//添加一条浏览器的历史记录

history.pushState(null, null, href);

});

//点击浏览器的前进后退按钮的时候出发

window.addEventListener("popstate", function(e) {

$('#content').html('当前页面href是:'+location.pathname);

});

保利威视云直播提供稳定流畅,高画质,低延迟的直播服务

酷播云服务,酷播云