浏览器中url存储的JavaScript实现


Posted in Javascript onJuly 07, 2015

现在的浏览器里,有一个十分有趣的功能,你可以在不刷新页面的情况下修改浏览器URL;在浏览过程中.你可以将浏览历史储存起来,当你在浏览器点击后退按钮的时候,你可以冲浏览历史上获得回退的信息,这听起来并不复杂,是可以实现的,我们来编写些代码。来看看它是如何工作的。

var stateObject = {};
var title = "Wow Title";
var newUrl = "/my/awesome/url";
history.pushState(stateObject,title,newUrl);

History 对象 pushState() 这个方法有3个参数,你可以从上面的例子看到。第一个参数,是一个Json对象 , 在你储存有关当前URl的任意历史信息.第二个参数,title 就相当于传递一个文档的标题 ,第三个参数是用来传递新的URL. 你将看到浏览器的地址栏发生变化而当前页面并没刷新。

让我们看一个例子,在这个例子中我们将在每个独立的URL中存储一些任意数据。

for(i=0;i<5;i++){
 var stateObject = {id: i};
 var title = "Wow Title "+i;
 var newUrl = "/my/awesome/url/"+i;
 history.pushState(stateObject,title,newUrl);
}

现在运行,点击浏览器的返回按钮,查看URL是怎么改变的。对于每次URL的改变,是因为它存储了历史状态“id”以及对应的值。但是我们怎么重新获得历史状态,并且在此基础上做些事情呢?我们需要对“popstate”添加事件监听器,这将会在每次历史对象的状态改变的时候触发。

for(i=0;i<5;i++){
 var stateObject = {id: i};
 var title = "Wow Title "+i;
 var newUrl = "/my/awesome/url/"+i;
 history.pushState(stateObject,title,newUrl);
 alert(i);
}
 
window.addEventListener('popstate', function(event) {
 readState(event.state);
});
 
function readState(data){
 alert(data.id);
}

现在你会看到无论什么时候你点击返回按钮,一个“popstate”事件就会被触发。我们的事件侦听器然后检索历史状态对象与之关联的URL,并提示“id”的值。

它是非常的简单和有趣,不是吗?

Javascript 相关文章推荐
B/S模式项目中常用的javascript汇总
Dec 17 Javascript
jquery删除数据记录时的弹出提示效果
May 06 Javascript
JS中JSON对象和String之间的互转及处理技巧
Apr 06 Javascript
Javascript必知必会(四)js类型转换
Jun 08 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
Jun 22 Javascript
Vue.js创建Calendar日历效果
Nov 03 Javascript
详细分析JS函数去抖和节流
Dec 05 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
Sep 14 Javascript
微信小程序页面传多个参数跳转页面的实现方法
May 17 Javascript
一文快速了解JQuery中的AJAX
May 31 jQuery
JavaScript ES6 Class类实现原理详解
May 08 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
Aug 20 Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 #Javascript
深入分析下javascript中的[]()+!
Jul 07 #Javascript
javascript实现的多个层切换效果通用函数实例
Jul 06 #Javascript
javascript动态添加删除tabs标签的方法
Jul 06 #Javascript
Jsonp post 跨域方案
Jul 06 #Javascript
javascript运动详解
Jul 06 #Javascript
浅谈jQuery中height与width
Jul 06 #Javascript
You might like
php fckeditor 调用的函数
2009/06/21 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
简单的js分页脚本
2009/05/21 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
jQuery 操作input中radio的技巧
2016/07/18 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
angular分页指令操作
2017/01/09 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
劳动竞赛活动总结
2014/05/05 职场文书
施工安全协议书范本
2014/09/26 职场文书
党员民主评议个人总结
2014/10/20 职场文书