`

HTML5 API——无刷新更新地址 history.pushState/replaceState 方法

 
阅读更多
[size=large]尽管是上面讲到的《JavaScript高级程序设计》(第二版)中提到,BOM中的location.path/query……(window.location)在通过JavaScript更改以后,浏览器都会通过刷新来到达你更改后的URL(location的意思就是位置。。)
而在JavaScript MVC开始流行之后,通过刷新来修改URL的方法,不禁让人感到烦躁。然而HTML5中就制定了一个这样的API,可以通过方法的方式来修改URL,而又不会使浏览器刷新,就是History API。
熟悉JavaScript开发的同学,对History肯定不会陌生,其中最经典的方法就是go,通过第一个类型为整数的传输参数,可以使浏览器到达当前页面之前或之后,曾经浏览过的页面。当然,这个也是要刷新来实现的。
现在History API新增了两个方法,分别是pushState和replaceState,其实用法都一样,看Mozilla的文档也没看到它们有多大不同,哈哈。
用法如下:
var state = { //这里可以是你想给浏览器的一个State对象,为后面的StateEvent做准备。
title : "HTML 5 History API simple demo",
url : "yourpage"
};
history.pushState(state, "HTML 5 History API simple demo", "yourpage");
还算简单吧,那么replaceState也是同样的用法:
var state = { //这里可以是你想给浏览器的一个State对象,为后面的StateEvent做准备。
title : "HTML 5 History API simple demo",
url : "yourpage"};
history.replaceState(state, "HTML 5 History API simple demo", "yourpage");
State Event
既然有无刷新改变URL的方法,当然也要有响应这个改变的时间啦。
嗯,没错。就有一个popstate事件,而传入的handler函数有一个参数,就是之前在pushState的第一个参数,一个State obj。开发者可以通过这个State obj来识别行为。详细代码如下:
var state = { //这里可以是你想给浏览器的一个State对象,为后面的StateEvent做准备。
title : "HTML 5 History API simple demo",
url : "yourpage"
};
history.pushState(state, "HTML 5 History API simple demo", "yourpage");
window.onpopstate = function (e) { document.title = e.state.title;}

当然还可以这样:
var state = { //这里可以是你想给浏览器的一个State对象,为后面的StateEvent做准备。
action : "page",
 title : "HTML 5 History API simple demo",
url : "yourpage"
};
history.pushState(state, "HTML 5 History API simple demo", "yourpage");
window.onpopstate = function (e) {
switch (e.state.action) {
 case "home" :
    document.title = "HOME ……";
    $.get("index.php").done(function (data) { $("#wrapper").html(data); });
     break;
   case "page" :
     document.title = e.state.title;
     $.get(e.state.url).done(function (data) { $("#wrapper").html(data); });
   break;
 }
}

上面这个是结合pushState和Ajax做的一个导航相应器(Navigation Handler),其实已经有一个不错的jQuery插件了,jQuery-Pjax(pushState and Ajax)。[/size]


转载http://hi.baidu.com/kooboy/item/d0138bd2276d9d16d90e44b1
分享到:
评论

相关推荐

    腾讯云:云函数SCF开发与部署教程.docx

    腾讯云:云函数SCF开发与部署教程.docx

    现代软件工程中的理系统源码解析及其开发流程

    内容概要:本文深入解析了‘理系统’源码的结构与实现,重点介绍系统架构、开发流程及可能遇到的问题与解决策略。内容涵盖MVC设计模式、需求分析、环境搭建、数据库设计、编码实现、测试调试和部署运维等各个方面,对复杂项目的开发具有较高的参考价值。 适合人群:从事软件开发的技术人员,特别是有一定工作经验的后端和全栈开发工程师。 使用场景及目标:适用于希望深入了解大型系统源码结构、熟悉开发全流程和技术细节的学习者;目标是在实际项目中能够更好地设计和实现复杂系统,提升系统性能和稳定性。 其他说明:文中提供的方法和实践不仅限于特定的编程语言或框架,但主要侧重于Java和Spring生态系统,同时也涉及到数据库管理和运维相关知识。

    EMC大纲-EMI和EMS的分类说明展示图

    EMC大纲-EMI和EMS的分类说明展示图

    全桥Boost-PFC电路及MATLAB仿真

    全桥Boost-PFC电路及MATLAB仿真

    【船舶定位】基于matlab卡尔曼滤波算法船舶GPS导航定位【Matlab仿真 3495期】.zip

    CSDN Matlab武动乾坤上传的资料均有对应的代码,代码均可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    Unity3D培训教程+中文手册+pdf.zip

    Unity3d学习教程资料pdf

    小波变换(heursure规则阈值+Minimax规则阈值)心电信号去噪【Matlab仿真 3402期】.zip

    CSDN Matlab武动乾坤上传的资料均有对应的代码,代码均可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    Java第三章代码练习1(学生信息)

    Java第三章代码练习1(学生信息)

    NetworkManager-wifi-1.18.4-3.el7.x86_64.rpm

    Centos7 el7.x86_64 官方离线安装包,安装指令为 sudo rpm -ivh NetworkManager-wifi-1.18.4-3.el7.x86_64.rpm

    NetworkManager-adsl-1.18.4-3.el7.x86_64.rpm

    Centos7 el7.x86_64 官方离线安装包,安装指令为 sudo rpm -ivh NetworkManager-adsl-1.18.4-3.el7.x86_64.rpm

    grubx64.efi

    官方centos-7.8.x86_64-EFI-BOOT-grubx64.efi

    Windows系统远程桌面设置(附win11家庭版开启组策略功能及远程桌面)

    替换文件

    自动精灵软件Windows版.rar

    自动精灵是一款功能强大的自动化脚本制作软件,它可以帮助用户解放双手,通过录制和界面化修改来快速制作脚本。以下是自动精灵的一些主要功能和特点: 简单快速脚本录制/界面化修改:用户无需编写代码,可以通过录制和界面化修改来快速制作脚本 。 强大灵活的动作类型:支持变量和代码编写脚本,提供多种动作类型供用户选择 。 脚本市场:拥有丰富的脚本市场,用户可以在这里找到大量优质脚本资源 。 Android版:适用于安卓设备,无需ROOT权限即可使用 。 Windows版和Mac版:也提供适用于Windows系统和苹果Mac系统的电脑版本 。 自动点击和滑动:支持快速点击、自动滑动等功能,可以设置点击位置、点击间隔、点击时长、循环次数等 。 文字识别:可以识别文字内容并进行相应的点击操作 。 快捷按钮:用户可以为规则脚本设置快捷按钮,点击即启动 。 嵌套规则:允许在当前规则中运行其他规则,实现嵌套执行 。 录制规则:提供一键录制规则的功能,方便快捷 。 定时启停:可以设置任意时间定时启动、停止、重复,实现无人值守 。 自动精灵适用于需要频繁对手机进行重复机械性操作的场景,能够帮助用户自动执行任务,提高效率,节省时间

    用蜂鸣器做简易音乐播放器-《晴天》周杰伦

    用蜂鸣器做简易音乐播放器—《晴天》周杰伦 使用单片机,配合定时器和蜂鸣器实现简易音乐播放器

    基于SSM的智慧校园政务OA系统【项目源码+数据库脚本+项目说明+软件工具】(毕设)

    一、项目简介 本项目是一套基于SSM的智慧校园政务OA系统,主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、软件工具等。 项目都经过严格调试,确保可以运行! 二、技术实现 后台框架:Spring、SpringMVC、MyBatis UI界面:JSP、jQuery、BootStrap ​数据库:MySQL 开发环境:JDK、Eclipse或IDEA、Tomcat、MySQL 三、系统功能 本高校教学管理系统分为学生模块、教师模块和管理员模块,分别对应三种角色:学生、教师和管理员。 各模块的功能如下: 一、学生模块 1.我的课表:学生可以查看自己的课表 2.在线选课:学生可以在线选课或退课 3.个人信息:学生可以修改自己的信息 4.教学评估:学生可以对老师进行评价打分 5.我的成绩:学生可以查看个人成绩信息 二、教师模块 1.我的课表:教师可以查看自己的课表,对学生的课程成绩进行打分 2.个人信息 3.退出系统 三、管理员模块 1.教师管理 2.学生管理 3.班级管理 4.课程管理 5.个人信息

    华为云:云安全服务构建企业级防护.docx

    华为云:云安全服务构建企业级防护.docx

    abrt-cli-2.1.11-57.el7.centos.x86_64.rpm

    Centos7 el7.x86_64 官方离线安装包,安装指令为 sudo rpm -ivh abrt-cli-2.1.11-57.el7.centos.x86_64.rpm

    高考志愿智能推荐-java-基于springboot高考志愿智能推荐系统设计与实现(毕业论文+PPT)

    高考志愿智能推荐-java-基于springboot高考志愿智能推荐系统设计与实现(毕业论文+PPT)

    使用声明宏实现组合委托示例

    设我们有两个已经定义的函数 foo 和 bar,我们希望创建一个宏来生成一个委托函数,该函数根据传入的参数选择调用 foo 或 bar。 在这个示例中: 我们定义了两个已有的函数 foo 和 bar。 我们定义了一个名为 create_delegate 的宏,该宏接受三个参数:委托函数的名称和两个要组合的函数名称。 宏生成一个委托函数,该函数根据传入的字符串参数选择调用 foo 或 bar。 在 main 函数中,我们调用了由宏生成的委托函数 delegate,并传递不同的函数名称和参数值。 通过这种方式,我们可以使用宏来组合多个函数,并通过一个委托函数来动态调用它们。这种方法可以提高代码的灵活性和可维护性。

    洛谷P1996约瑟夫问题多种解法及编程实现

    内容概要:本文详细介绍了洛谷P1996约瑟夫问题的各种解法,包括队列、循环链表、数组、数学方法等。每个解法都有详细的代码实现和视频讲解链接,适用于不同层次的学习者。文章还提供了丰富的背景资料,如信息学奥赛的相关知识、编程语言的选择等。 适合人群:初学者和有一定编程基础的信息学竞赛参赛者。 使用场景及目标:学习不同解法的优缺点,提高解决问题的能力和编程技巧,准备各类信息学竞赛。 其他说明:文章不仅包含具体的解法和代码实现,还有关于信息学竞赛的背景知识,有助于全面理解题目和解题思路。

Global site tag (gtag.js) - Google Analytics