BOM之history
history是JavaScript中BOM上的一个对象,其中存储了浏览器的历史记录
history存储简单过程
浏览器会将一个窗口中访问的网页进行记录,不管我们通过以下哪种方式改变页面,浏览器都会把改变后的网页记录下来,
以便通过浏览器的前进和后退按钮,可以快速切换到已经访问到的页面。
这些方式是:
- 直接在地址栏输入网页地址
- 超链接点击跳转到其他页面(必须保证在同一个窗口下跳转)
- 脚本改变location.href
- 表单提交跳转(必须保证在同一个页面下跳转)
浏览器使用的一个类似栈的数据结构来存储历史记录。其功能的实现主要是根据栈和一个访问指针来实现的。
首先,历史记录的进栈与出栈是遵从“先进后出”的原则,每次添加新记录都是将该记录放到访问指针相邻的上方位置
(注意:一般情况下访问指针都是位于栈顶处,如果当前访问指针不是位于栈顶(例如用户进行了回退操作),此时我们改变页面,浏览器会将当前指针上边的历史记录全部舍弃,而将新历史记录添加到栈顶,然后访问指针指向它)。
然后,访问指针表示的是当前网址带历史记录栈中的位置。
之后页面的前进和后台只是让访问指针在栈中上移一个位置和下移一个位置而已。
(注意: 当我们打开一个空白标签页,即没有指定具体url时,浏览器也会为该窗口创建history对象,然后将空白页作为历史记录中的第一条记录)
history对象的一些属性和方法
属性:
- history.length 返回当前窗口历史记录的条数
方法:
- history.forward() 历史记录中当前页面的上一个页面(就是访问指针上移一个位置)
- history.back() 历史记录中当前页面的下一个页面(就是访问指针下移一个位置)
- history.go(n) 历史中前进或后退n个页面(n为正则前进,否则后退);
(注意:如果操作超出历史记录范围,操作不会生效)
历史记录管理
我们通过修改hash和hashchange事件来实现历史记录的管理。
用pushState来添加一条历史记录
history.pushState(state, title, url);
用replaceState来替换当前历史记录
history.replaceState(state, title, url);
popstate事件:
当历史记录发生改变时触发事件
调用history.pushState()或者history.replaceState()不会触发popstate事件,只有在做出浏览器动作时,才会触发该事件,如用户点击浏览器的回退按钮(或者在Javascript代码中调用history.back())
window.addEventListener('popstate', function(e) {
// handle
console.log(e);
}, false);
hashchange事件:
当hash值改变该事件会被触发
window.addEventListener('hashchange', function (e){
// handle
})
BOM之history的更多相关文章
- BOM对象——History
BOM对象--History <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- BOM之history对象
前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后 ...
- BOM之history对象(转)
前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后 ...
- JavaScript(JS)之Javascript对象BOM,History,Location,Function...(二)
https://www.cnblogs.com/haiyan123/p/7594046.html 在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创 ...
- JS BOM对象 History对象 Location对象
一.BOM对象 BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作 window对象 所有浏览器都支持 window 对象. 概念上讲.一个html文档对应一个window对象. 功能上讲: 控 ...
- BOM 子对象,history,location,screen
history:包括浏览器访问过的 url 属性:返回浏览器访问过的历史记录数 方法:back(); forward(); go(number) location:包含当前 url 的相关信息 属性: ...
- JavaScript 之 BOM
BOM BOM(Bowser Object Model) 浏览器对象模型 提供了独立于页面内容而与浏览器就行交互的对象,核心对象是window. (BOM 无标准支持) Navigator 浏览器 ...
- window对象,BOM,window事件,延时器,DOM
01.定时器补充 function fn(){ console.log(1);}setInterval("fn()",100); //定时器调用匿名函数/* funct ...
- JS 浏览器BOM
BOM:Browser Object Model 浏览器对象模型 2.组成: window :窗口对象 1.创建: 2.方法: *与弹出框有关 1.alert(); 弹出警告框 2.confirm() ...
随机推荐
- 利用CFAbsoluteTimeGetCurrent()计算时间差
开发中,遇到计算时间差的问题,利用CFAbsoluteTimeGetCurrent()可以很方便的进行计算 实例: 场景:类似购物车中修改商品数量的功能,如下图所示,要求,修改完的数量,要同步到服务器 ...
- Devops成功的八大炫酷工具
原文链接:http://www.infoworld.com/article/3031009/devops/8-more-cool-tools-for-devops-success.html 为自动化和 ...
- go结构体组合函数
结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就简的语言,一切令人困惑的特性都必须去掉. 简单来讲,Go提供的结构体就是把使用各种数据类型定义的不同变量组合起来的高级数 ...
- Unity3D - 性能优化之Draw Call
Unity3D - 性能优化之Draw Call 分类: Unity 3D2012-09-13 11:18 1002人阅读 评论(0) 收藏 举报 性能优化引擎测试脚本图形算法 Unity(或者说基本 ...
- css写箭头
/* 向上的箭头 */ .dot-top { font-size: 0; line-height: 0; border-width: 10px; border-color: red; border-t ...
- ListView中CheckBox使用问题
因为CheckBox的点击事件优先级比ListView的高,所以当ListView中使用CheckBox会导致ListView的setOnItemClickListener失去响应. 解决的方法:在C ...
- Linux基础知识之挂载详解(mount,umount及开机自动挂载)
Linux基础知识之挂载详解(mount,umount及开机自动挂载) 转载自:http://www.linuxidc.com/Linux/2016-08/134666.htm 挂载概念简述: 根文件 ...
- NIM游戏策略
NIM取子游戏是由两个人面对若干堆硬币(或石子,或..)进行的游戏,游戏由两个人进行,设有k>=1堆硬币,各堆含有n1,n2,n3,n4.....,nk个硬币,游戏的目的就是选取最后剩下的硬币. ...
- python的list求和与求积
python中,无论是对的list求和还是求积,我都给出了两种方法. 1.对list求和 1.1 s=0 for i in range(10): s+=i 1.2 s=sum(range(10)) 2 ...
- COM组件多接口对象模型
COM组件有两种接口类型,Dual and Custom,如下图所示.本文说的是Custom.所谓多接口COM对象是指此COM对象实现了多于一个的自定义接口,即Custom接口. 接口图如下: 需要注 ...