浏览器中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 相关文章推荐
JavaScript加密解密7种方法总结分析
Oct 07 Javascript
ajax无刷新动态调用股票信息(改良版)
Nov 01 Javascript
自己写了一个展开和收起的多更能型的js效果
Mar 05 Javascript
jQuery之Deferred对象详解
Sep 04 Javascript
JS实现文字向下滚动完整实例
Feb 06 Javascript
JavaScript实现的一个倒计时的类
Mar 12 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
Dec 31 Javascript
Javascript 实现全屏滚动实例代码
Dec 31 Javascript
最全的JavaScript开发工具列表 总有一款适合你
Jun 29 Javascript
Node.js利用console输出日志文件的方法示例
Apr 27 Javascript
JavaScript实现的联动菜单特效示例
Jul 08 Javascript
微信小程序与公众号卡券/会员打通的问题
Jul 25 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连接MySQL代码的参数说明
2008/06/07 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
jquery.validate使用攻略 第三部
2010/07/01 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
Python实现学生成绩管理系统
2020/04/05 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
python实现函数极小值
2019/07/10 Python
python实现的发邮件功能示例
2019/09/11 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
小学红领巾中秋节广播稿
2014/01/13 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
建设工地安全标语
2014/06/07 职场文书
刑事和解协议书范本
2014/11/19 职场文书
新员工考核评语
2014/12/31 职场文书
民政工作个人总结
2015/02/28 职场文书
农村婚庆主持词
2015/06/29 职场文书
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers