使用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 相关文章推荐
js 代码集(学习js的朋友可以看下)
Jul 22 Javascript
jQuery遍历Form示例代码
Sep 03 Javascript
js实现简单登录功能的实例代码
Nov 09 Javascript
jquery控制select的text/value值为选中状态
Jun 03 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
Jun 30 Javascript
使用Plupload实现直接上传附件至七牛云存储
Dec 26 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
Aug 13 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
Mar 30 Javascript
JavaScript门道之标准库
May 26 Javascript
Vue全局分页组件的实现代码
Aug 10 Javascript
vue页面加载时的进度条功能(实例代码)
Jan 13 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
ThinkPHP的URL重写问题
2014/06/22 PHP
php实现的ping端口函数实例
2014/11/12 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
JavaScript中两个字符串的匹配
2016/06/08 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
使用Python生成XML的方法实例
2017/03/21 Python
在双python下设置python3为默认的方法
2018/10/31 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
业务助理岗位职责
2013/11/18 职场文书
学校募捐倡议书
2014/05/14 职场文书
教师暑期培训感言
2014/08/15 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
课外科技活动总结
2014/08/27 职场文书
秋季运动会加油词
2015/07/18 职场文书
新人入职感言
2015/07/31 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
nginx日志格式分析和修改
2022/04/28 Servers