HTML5 history API实践

简介:

一、history API知识点总结

  在HTML4中,我们已经可以使用window.history对象来控制历史记录的跳转,可以使用的方法包括:

复制代码
  history.forward();//在历史记录中前进一步

  history.back();//在历史记录中后退一步

  history.go(n);//在历史记录中跳转n步,n=0则刷新当前页,n=-1则后退一步
复制代码

  在HTML5中,又新增了四个可用的API,包括:

复制代码
history.pushState(data[,title][,url]);//向历史记录中追加一条记录,data是一个js对象,可以是任何格式的json数据,title参数暂时不起作用,我亲自试了也确实如此。参数url是指地址栏中的地址值,不填则保持当前url

history.replaceState(data[,title][,url]);//替换当前页在历史记录中的信息。参数与上面一致。

history.state;//是一个属性,可以得到当前页的state信息。

window.onpopstate;//是一个事件,在点击浏览器后退按钮或js调用forward()、back()、go()时触发。监听函数中可传入一个event对象,event.state即为通过pushState()或replaceState()方法传入的data参数。
复制代码

二、新API在实际中的使用

  知道了有这些新API,我们可以如何利用它们呢?以下是两个相关的使用案例:

  ① 还原ajax程序中浏览器后退按钮的功能。其实这个应用已经被大家广泛熟知了,由于ajax的固有缺点(无法使用浏览器后退按钮返回上一页),通过在发起ajax请求时在历史记录中添加一条记录并修改地址栏中的值,来模拟一个正常的跳转,同时仍然保留ajax异步加载的优点。方法如下:

var title = '另一篇随笔';
var url = 'http://www.cnblogs.com/lvdabao/p/另一篇随笔.html';
var state = {title:title,url:url};
history.pushState(state,title,url);//第三个参数url的值将会出现在地址栏

   点击下面按钮,注意地址栏的变化:

    

  ②保存异步请求的参数,在页面返回时重现原来页面上的动态数据。具体需求是这样的:比如我们处在一个搜索结果列表页,页面上的内容是根据搜索条件动态得到的,我们可以点击其中一项进行详情预览(发ajax请求),在详情页点击“返回”时,我们希望原来的搜索数据还在,而不是变回列表页初始加载时的数据。以前,我们可以用回传参数的方式解决这样的需求,但那样做的缺点就是有大量的数据需要来回传递,如果页面层级较多,将会很不方便。那么现在,我们结合使用history的onpopstate事件,便可用完成这样的功能。举例来说:

  我要做一个介绍HTML5 history的页面,index.html中的代码如下:

复制代码
<body>
<p>HTML5 history API 介绍</p>
<a href="javascript:void(0)" id="pushstate">history.pushState(data, title [, url])</a>&nbsp;&nbsp;&nbsp;&nbsp;
<a href="javascript:void(0)" id="replacestate">history.replaceState(data, title [, url]) </a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="javascript:void(0)" id="onpopstate">window.onpopstate</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="javascript:void(0)" id="back">返回</a>
<div id="loaddiv"></div>
<script>

$(function(){
    
    var loaddiv = $('#loaddiv');

//点击不同的链接,分别在loaddiv中加载不同的内容
$(
'#pushstate').click(function(){ loaddiv.load('1.php?stype=push'); history.pushState({title:'push',url:'1.php?stype=push'}); }); $('#replacestate').click(function(){ loaddiv.load('1.php?stype=replace'); history.pushState({title:'replace',url:'1.php?stype=replace'}); }); $('#onpopstate').click(function(){ loaddiv.load('1.php?stype=onpop'); history.pushState({title:'onpop',url:'1.php?stype=onpop'}); });

//点击返回,让浏览器后退一步 $(
'#back').click(function(){ history.back(); });
//兼听popstate事件,可以取到e.state的值,其中保存了你调用pushState方法时传入的数据,根据数据中的url异步加载相应内容。便实现了点击返回时页面上的数据保持是上次加载过的。 window.onpopstate
= function(e){ if(e.state){ loaddiv.load(e.state.url); } } }); </script> </body>
复制代码

  我要分别介绍history的三个新特性,通过调用jquery的load方法来异步加载,发送一个请求到1.php,同时传递对应的参数。后台接受到请求后根据不同的参数返回不同的数据,php代码如下:

复制代码
<?php
$type = $_REQUEST['stype'];
switch($type){
    case 'push' :  
    echo 'history.pushState(data, title [, url]):往历史记录堆栈顶部添加一条记录;data会在onpopstate事件触发时作为参数传递过去;title为页面标题,当前所有浏览器都会 忽略此参数;url为页面地址,可选,缺省为';
    break;
    case 'replace' :  
    echo 'history.replaceState(data, title [, url]) :更改当前的历史记录,参数同上';
    break;
    case 'onpop' :  
    echo 'window.onpopstate:响应pushState或replaceState的调用;';
    break;
    }
?>
复制代码

  我在这里无法上传php文件,你可以将代码复制到本地服务器测试。如此一来,便可以实现像github那样的页面加载机制。

  以上便是我所见到过的关于history的两点使用方法。有发现错误欢迎指正,其他观点也欢迎交流。

本文转自吕大豹博客园博客,原文链接:http://www.cnblogs.com/lvdabao/p/3253071.html,如需转载请自行联系原作者

相关文章
|
2天前
|
存储 缓存 JavaScript
深入理解RESTful API设计原则与实践
【5月更文挑战第7天】在现代Web服务开发中,表述性状态传递(REST)是一种广泛采用的架构风格,用于构建可扩展的网络应用程序接口(APIs)。本文将探讨RESTful API的核心设计原则,并通过具体实例展示如何实现一个符合REST约束的后端服务。我们将讨论资源的识别、客户端-服务器通信模式、无状态性、以及统一接口的重要性,并探索如何使用当前的流行技术栈来实现这些概念。
|
3天前
|
JSON API 数据格式
淘宝商品评论数据获取:从API调用到应用实践
在电商的世界里,用户评论是洞察商品质量的一扇窗。淘宝,作为中国最大的在线购物平台,其海量的商品评论数据尤为宝贵。本文将带您走进淘宝商品评论数据的获取之旅,从API调用的基础知识到实际应用的代码示例,一探究竟。
|
3天前
|
移动开发 前端开发 JavaScript
:掌握移动端开发:HTML5 与 CSS3 的高效实践
:掌握移动端开发:HTML5 与 CSS3 的高效实践
20 1
|
9天前
|
移动开发 前端开发 UED
【专栏:HTML与CSS前端技术趋势篇】渐进式增强与优雅降级在前端开发中的实践
【4月更文挑战第30天】前端开发中的渐进式增强和优雅降级是确保跨浏览器、跨设备良好用户体验的关键策略。渐进式增强是从基础功能开始,逐步增加高级特性,保证所有用户能访问基本内容;而优雅降级则是从完整版本出发,向下兼容,确保低版本浏览器仍能使用基本功能。实践中,遵循HTML5/CSS3规范,使用流式布局和响应式设计,检测浏览器特性,并提供备选方案,都是实现这两种策略的有效方法。选择合适策略优化网站,提升用户体验。
|
9天前
|
移动开发 缓存 前端开发
【专栏:HTML与CSS实践篇】网页性能优化:CSS与HTML的最佳实践
【4月更文挑战第30天】本文探讨了优化CSS和HTML以提升网页性能的最佳实践。HTML优化包括:精简结构、压缩代码、异步加载脚本和利用缓存。CSS优化则涉及:精简代码、合并文件、使用CSS Sprite、善用CSS3属性、避免@import及响应式设计。这些方法能加快加载速度,改善用户体验。
|
9天前
|
前端开发 JavaScript 开发者
【专栏:HTML与CSS实践篇】CSS框架(Bootstrap/Foundation)快速上手
【4月更文挑战第30天】Bootstrap和Foundation是两种流行的CSS框架,用于构建响应式网页。它们包含预定义的样式、栅格系统和组件,加速开发流程。Bootstrap以其12列栅格系统闻名,而Foundation提供更定制化和模块化选项。了解并熟练运用这些框架的基本概念和组件,结合最佳实践和性能优化,能帮助开发者高效创建符合现代设计趋势的网页项目。
|
9天前
|
编解码 前端开发 UED
【专栏:HTML 与 CSS 实践篇】网页图标与字体图标的使用
【4月更文挑战第30天】本文探讨了网页设计中两种主要图标形式——传统图标和字体图标。传统图标(PNG, JPEG, GIF)视觉效果丰富但文件大,易影响加载速度且维护不便。字体图标占用空间小,易于维护和定制,但视觉效果相对简单,选择有限。实际应用中,两者可结合使用,以导航栏、操作按钮和提示信息为例说明了图标的重要性。设计师需注意兼容性、清晰度和性能优化问题,根据项目需求选择合适图标类型,以提升网页质量和用户体验。
|
9天前
|
编解码 前端开发 UED
【专栏:HTML与CSS实践篇】HTML与CSS在电商网站中的应用
【4月更文挑战第30天】本文探讨了HTML和CSS在电商网站中的关键作用。HTML作为基础结构,定义网页内容和布局,用于页面布局、内容展示和表单处理;而CSS则负责样式设计和美化,包括响应式设计、交互效果和模块化,两者结合创建出功能齐全、视觉吸引力强的在线购物环境,提升用户体验。
|
9天前
|
编解码 前端开发 UED
【专栏:HTML与CSS实践篇】响应式网站开发实战
【4月更文挑战第30天】本文探讨了响应式网站开发,它能根据用户设备自动调整布局,提供最佳浏览体验。通过HTML和CSS,利用媒体查询、Flexbox和百分比宽度等技术实现响应式设计。媒体查询按屏幕尺寸定义CSS规则,Flexbox处理元素排列。文章通过新闻网站首页设计实例,展示了如何应用这些理论,包括使用Flexbox设计导航栏,使用媒体查询调整轮播图和内容区域,以及创建自适应页脚。遵循移动优先原则,关注性能优化和用户体验,响应式设计是前端开发的关键,为多设备用户提供优质浏览体验。
|
9天前
|
前端开发 搜索推荐 SEO
【专栏:HTML 与 CSS 实践篇】使用 HTML 与 CSS 构建个人博客网站
【4月更文挑战第30天】本文介绍了使用HTML和CSS构建个性化个人博客网站的步骤。首先,规划设计网站主题、风格和结构;接着,利用HTML搭建首页、文章列表页和文章详情页的结构;然后,通过CSS设计整体风格、布局和交互效果;填充内容并进行SEO优化;最后,通过实际案例展示HTML和CSS的应用。构建博客网站不仅是展示自我和分享知识的平台,也是提升技能和创意实践的好机会。