使用JavaScript修改浏览器URL地址栏的实现代码


Posted in Javascript onOctober 21, 2013

现在的浏览器里,有一个十分有趣的功能,你可以在不刷新页面的情况下修改浏览器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”的值。
它是非常的简单和有趣,不是吗?

英语原文: http://hasin.me/2013/10/16/manipulating-url-using-javascript-without-freshing-the-page/

Javascript 相关文章推荐
jQuery获取地址栏参数插件(模仿C#)
Oct 26 Javascript
用jquery生成二级菜单的实例代码
Jun 24 Javascript
JSF中confirm弹出框的用法示例介绍
Jan 07 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
May 28 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
Aug 13 Javascript
javascript中parseInt()函数的定义和用法分析
Dec 20 Javascript
javascript实现随机读取数组的方法
Aug 03 Javascript
jQuery组件easyui基本布局实现代码
Aug 25 Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 Javascript
node Buffer缓存区常见操作示例
May 04 Javascript
vue实现tab栏点击高亮效果
Aug 19 Javascript
详细介绍Next.js脚手架完整搭建封装
Apr 26 Javascript
JS操作Cookie写入和读取实例代码
Oct 20 #Javascript
在javaScript中关于submit和button的区别介绍
Oct 20 #Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
Oct 20 #Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
Oct 20 #Javascript
jQuery 属性选择器element[herf*='value']使用示例
Oct 20 #Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
Oct 20 #Javascript
浏览器的JavaScript引擎的识别方法
Oct 20 #Javascript
You might like
用PHP实现小型站点广告管理
2006/10/09 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
php防止sql注入简单分析
2015/03/18 PHP
php实现简单的上传进度条
2015/11/17 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
JS 树形递归实例代码
2010/05/18 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
Python中文字符串截取问题
2015/06/15 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
python重要函数eval多种用法解析
2020/01/14 Python
python实现密码强度校验
2020/03/18 Python
Python实现随机爬山算法
2021/01/29 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
华为python面试题
2016/05/03 面试题
工商管理专业学生的自我评价
2013/10/01 职场文书
爱护公共设施标语
2014/06/24 职场文书
2014年管理工作总结
2014/11/22 职场文书
暑假安全保证书
2015/02/28 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python