HTML5 API详解(15):History 不刷新也可以实现网页跳转

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, replaceState54.0(2.0)--11.505.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);

});

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值