使用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 相关文章推荐
在IE模态窗口中自由查看HTML源码的方法
Mar 08 Javascript
js检测网络是否具体连接功能的代码
May 23 Javascript
JavaScript中具名函数的多种调用方式总结
Nov 08 Javascript
解析javascript中鼠标滚轮事件
May 26 Javascript
JavaScript实现将文本框的值插入指定位置的方法
Aug 13 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
Nov 30 Javascript
Angular.js实现注册系统的实例详解
Dec 18 Javascript
基于vue实现可搜索下拉框定制组件
Mar 26 Javascript
浅谈Node.js 中间件模式
Jun 12 Javascript
详解Nuxt.js部署及踩过的坑
Aug 07 Javascript
Vue2.0 v-for filter列表过滤功能的实现
Sep 07 Javascript
js实现单元格拖拽效果
Feb 10 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微信红包生成代码分享
2016/10/06 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
PHP 实现缩略图
2021/03/09 PHP
jquery radio 操作代码
2011/03/16 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
python之import机制详解
2014/07/03 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
python操作excel的方法
2018/08/16 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
2019/07/14 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
AC Lens:购买隐形眼镜
2017/02/26 全球购物
《北京的春节》教学反思
2014/04/07 职场文书
财产公证书
2014/04/10 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
小学国庆节活动总结
2015/03/23 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS