浏览器中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 相关文章推荐
菜单效果
Oct 14 Javascript
Jquery 表单取值赋值的一些基本操作
Oct 11 Javascript
模拟select的代码
Oct 19 Javascript
JQuery获取浏览器窗口内容部分高度的代码
Feb 24 Javascript
10款非常有用的 Ajax 插件分享
Mar 14 Javascript
JS 控件事件小结
Oct 31 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
Jun 16 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
Mar 16 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
Aug 21 Javascript
解析利用javascript如何判断一个数为素数
Dec 08 Javascript
详解vue-property-decorator使用手册
Jul 29 Javascript
jquery实现进度条状态展示
Mar 26 jQuery
浅谈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
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
学习ExtJS Column布局
2009/10/08 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
详解JavaScript的变量
2019/04/04 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
Python Matplotlib库入门指南
2015/05/18 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
python difflib模块示例讲解
2017/09/13 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
python selenium firefox使用详解
2019/02/26 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
澳洲的服装老品牌:SABA
2018/02/06 全球购物
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
化工机械应届生求职信
2013/11/04 职场文书
金融专业个人求职信范文
2013/11/28 职场文书
骨干教师培训方案
2014/05/06 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
小学校本教研总结
2015/08/13 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
Netty结合Protobuf进行编解码的方法
2021/06/26 Java/Android