使用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 相关文章推荐
总结AJAX相关JS代码片段和浏览器模型
Aug 15 Javascript
基于jQuery的图片大小自动适应实现代码
Nov 17 Javascript
javascript 得到文件后缀名的思路及实现
May 09 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
Dec 17 Javascript
js获取url传值的方法
Dec 18 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
Aug 08 Javascript
微信禁止下拉查看URL的处理方法
Sep 28 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
Dec 18 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
May 16 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
Apr 04 Javascript
React.js组件实现拖拽排序组件功能过程解析
Apr 27 Javascript
jquery html添加元素/删除元素操作实例详解
May 20 jQuery
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_xmlhttp 乱码问题解决方法
2009/08/07 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
php实现36进制与10进制转换功能示例
2017/01/10 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
基于JavaScript实现百度搜索框效果
2020/06/28 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
Python内存管理实例分析
2019/07/10 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
英国电器零售商:PRC Direct
2018/06/21 全球购物
新护士岗前培训制度
2014/02/02 职场文书
幼儿园教师教学反思
2014/02/06 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
以权谋私检举信范文
2015/03/02 职场文书
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript