浏览器中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 相关文章推荐
js Event对象的5种坐标
Sep 12 Javascript
jQuery操作DOM之获取表单控件的值
Jan 23 Javascript
jscript读写二进制文件的方法
Apr 22 Javascript
第一次接触神奇的Bootstrap网格系统
Jul 27 Javascript
jQuery插件实现可输入和自动匹配的下拉框
Oct 24 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
Dec 23 Javascript
Vue系列:通过vue-router如何传递参数示例
Jan 16 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
Jun 08 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
Feb 15 jQuery
Vue通过配置WebSocket并实现群聊功能
Dec 31 Javascript
vue 调用 RESTful风格接口操作
Aug 11 Javascript
详解JavaScript中分解数字的三种方法
Jan 05 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查看session内容的函数
2008/08/27 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
php的一些小问题
2010/07/03 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
学生打架检讨书大全
2014/01/23 职场文书
建筑施工安全责任书
2014/07/24 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
致运动员的广播稿
2015/08/19 职场文书
七年级语文教学反思
2016/03/03 职场文书