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,如需转载请自行联系原作者

相关文章
|
8月前
|
监控 供应链 搜索推荐
电商数据开发实践:深度剖析1688商品详情 API 的技术与应用
在电商数字化转型中,数据获取效率与准确性至关重要。本文介绍了一款高效商品详情API,具备全维度数据采集、价格库存管理、多媒体资源获取等功能,结合实际案例探讨其在电商开发中的应用价值与优势。
|
8月前
|
前端开发 Java API
利用 Spring WebFlux 技术打造高效非阻塞 API 的完整开发方案与实践技巧
本文介绍了如何使用Spring WebFlux构建高效、可扩展的非阻塞API,涵盖响应式编程核心概念、技术方案设计及具体实现示例,适用于高并发场景下的API开发。
627 0
|
10月前
|
缓存 监控 搜索推荐
电商生态协同的关键:API接口在电商数据对接中的应用与实践
电商数据对接API接口是连接电商平台与外部系统的智慧桥梁,通过标准化协议实现商品管理、订单处理、支付结算、物流追踪及数据分析等全链路支持。本文从核心功能、对接流程、应用场景和优化策略四个方面解析其技术逻辑与实践路径。API接口助力店铺管理自动化、精准营销与跨境电商全链路管理,同时通过安全防护、性能调优与合规管理提升效能,推动电商行业向智能化、高效化发展。
|
9月前
|
JSON API UED
运营商二要素验证 API:核验身份的一致性技术实践(Python示例)
随着线上业务快速发展,远程身份核验需求激增。运营商二要素验证API通过对接三大运营商实名数据,实现姓名、手机号、身份证号的一致性校验,具备权威性高、实时性强的优势,广泛应用于金融、电商、政务等领域。该接口支持高并发、低延迟调用,结合Python示例可快速集成,有效提升身份认证的安全性与效率。
862 0
|
11月前
|
机器学习/深度学习 JSON 算法
京东拍立淘图片搜索 API 接入实践:从图像识别到商品匹配的技术实现
京东拍立淘图片搜索 API 是基于先进图像识别技术的购物搜索接口,支持通过上传图片、URL 或拍摄实物搜索相似商品。它利用机器学习和大数据分析,精准匹配商品特征,提供高效、便捷的搜索体验。接口覆盖京东海量商品资源,不仅支持外观、颜色等多维度比对,还结合用户行为数据实现智能推荐。请求参数包括图片 URL 或 Base64 编码,返回 JSON 格式的商品信息,如 ID、价格、链接等,助力消费者快速找到心仪商品,满足个性化需求。
728 18
|
9月前
|
自然语言处理 供应链 前端开发
深度解析与技术实践:高效调用淘宝商品评论API的策略与代码实现
本文深入解析淘宝开放平台商品评论接口(Taobao.item_review),涵盖接口功能、调用逻辑与实战代码,助力开发者高效获取用户评价数据,提升电商数据分析能力。
|
10月前
|
人工智能 自然语言处理 API
电商API技术文档编写规范白皮书:方法论与行业实践
本文系统阐述电商API接口文档的编写规范与最佳实践,涵盖结构设计、技术语言、开发者体验、版本控制及质量保障等方面,助力企业提升开发效率,构建开放共赢的电商生态。
|
7月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
341 19
|
6月前
|
缓存 边缘计算 运维
基于 Cloudflare Workers 构建高性能知识库镜像服务:反向代理与 HTML 动态重写实践
基于Cloudflare Workers构建的边缘计算镜像服务,通过反向代理、HTML动态重写与智能缓存,优化维基百科等知识平台的访问性能。支持路径映射、安全头清理与容错回退,实现免运维、低延迟、高可用的Web加速方案,适用于教育、科研等合规场景。
1178 8
|
7月前
|
供应链 安全 API
唯品会:利用银行转账API实现企业采购对公支付的技术实践
企业采购支付面临合规、效率与对账难题。唯品会通过银行API实现银企直连,构建安全高效对公支付系统,支持ISO 20022标准与多重风控,支付耗时从72小时降至90秒,错误率下降98%,推动供应链数字化升级。(236字)
570 1