浏览器中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中window.open()的所有参数详细解析
Jan 09 Javascript
jQuery中:enabled选择器用法实例
Jan 04 Javascript
JavaScript类继承及实例化的方法
Jul 25 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
Feb 17 Javascript
javascript iframe跨域详解
Oct 26 Javascript
Angular.js中定时器循环的3种方法总结
Apr 27 Javascript
详解vue组件通信的三种方式
Jun 30 Javascript
微信小程序授权登录及解密unionId出错的方法
Sep 26 Javascript
JS实现查找数组中对象的属性值是否存在示例
May 24 Javascript
Element-UI+Vue模式使用总结
Jan 02 Javascript
JS如何实现手机端输入验证码效果
May 13 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
Jul 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设计聊天室步步通
2006/10/09 PHP
PHP 递归效率分析
2009/11/24 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
jQuery实现的简单在线计算器功能
2017/05/11 jQuery
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
js刷新页面location.reload()用法详解
2019/12/09 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
js实现日历
2020/11/07 Javascript
python的类方法和静态方法
2014/12/13 Python
Python中使用Inotify监控文件实例
2015/02/14 Python
python中set常用操作汇总
2016/06/30 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
百联网上商城:i百联
2017/01/28 全球购物
数字天堂软件测试面试题
2012/12/23 面试题
大学生党员承诺书
2014/05/20 职场文书
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers