BOM 浏览器对象模型_当前窗口的浏览历史 history 对象
当前窗口的浏览历史 window.history 对象
保存了当前窗口访问过的所有页面网址
由于安全原因,浏览器不允许脚本读取这些地址,但是允许在地址之间导航
history.back() 相当于 history.go(-1)
浏览器工具栏的 “前进” 和 “后退” 按钮,其实就是对 History 对象进行操作
// 当前窗口访问过多少个网页
window.history.length // // History 对象的当前状态
// 通常是 undefined,即未设置
window.history.state // undefined
主要有两个属性
- history.length ---- 当前窗口访问过的网址数量(包括当前网页)
- history.state ---- history 堆栈 最上层的状态值
5 个方法
history.back() ---- 移动到上一个网址,等同于点击浏览器的后退键
对于第一个访问的网址,该方法无效果
history.forward() ---- 移动到下一个网址,等同于点击浏览器的前进键
对于最后一个访问的网址,该方法无效果
history.go() ---- 接受一个整数作为参数,以当前网址为基准,移动到参数指定的网址
比如 go(1) 相当于forward() go(-1)相当于back()
如果参数超过实际存在的网址范围,该方法无效果
如果不指定参数,默认参数为 0,相当于刷新当前页面
注意: 移动到以前访问过的页面时,页面通常是从浏览器缓存之中加载,而不是重新要求服务器发送新的网页
history.pushState() ---- 用于在历史中添加一条记录
window.history.pushState(state, title, url)
不会触发页面刷新,只是导致 history 对象发生变化,地址栏会有反应
使用该方法之后,就可以用 history.state属性读出状态对象
var stateObj = { foo: 'bar' };
history.pushState(stateObj, 'page 2', '2.html');
history.state // {foo: "bar"}如果
pushState的 URL 参数设置了一个新的锚点值(即hash),并不会触发hashchange事件- 反过来,如果 URL 的锚点值变了,则会在 history 对象创建一条浏览记录
- 如果
pushState()方法设置了一个跨域网址,则会报错
这样设计的目的是,防止恶意代码让用户以为他们是在另一个网站上
因为这个方法不会导致页面跳转
接受三个参数
state ---- 一个与添加的记录相关联的状态对象,主要用于 popstate 事件
该事件触发时,该对象会传入回调函数
也就是说,浏览器会将这个对象序列化以后保留在本地
重新载入这个页面的时候,可以拿到这个对象。
如果不需要这个对象,此处可以填 null
title ---- 新页面的标题
现在所有浏览器都忽视这个参数,所以这里可以填空字符串
url ---- 新的网址
必须与当前页面处在同一个域。浏览器的地址栏将显示这个网址
假定当前网址是 example.com/1.html
使用 pushState() 方法在浏览记录(history 对象)中添加一个新记录
var stateObj = { foo: 'bar' };
history.pushState(stateObj, 'page 2', '2.html');
加新记录后,浏览器地址栏立刻显示 example.com/2.html
但并不会跳转到 2.html,甚至也不会检查 2.html 是否存在,它只是成为浏览历史中的最新记录
这时,在地址栏输入一个新的地址(比如访问 google.com ),然后点击了倒退按钮,页面的 URL 将显示 2.html
你再点击一次倒退按钮,URL 将显示 1.html
history.replaceState() ---- 用来修改 History 对象的当前记录,其他都与 pushState() 方法一模一样
假定当前网页是 example.com/example.html
history.pushState({page: 1}, 'title 1', '?page=1')
// URL 显示为 http://example.com/example.html?page=1 history.pushState({page: 2}, 'title 2', '?page=2');
// URL 显示为 http://example.com/example.html?page=2 history.replaceState({page: 3}, 'title 3', '?page=3');
// URL 显示为 http://example.com/example.html?page=3 history.back()
// URL 显示为 http://example.com/example.html?page=1 history.back()
// URL 显示为 http://example.com/example.html history.go(2)
// URL 显示为 http://example.com/example.html?page=3
popstate 事件
每当同一个文档的浏览历史(即 history 对象)出现变化时,就会触发 popstate 事件
仅仅调用 pushState() 方法或 replaceState() 方法 ,并不会触发该事件
该事件只针对同一个文档,如果浏览历史的切换,导致加载不同的文档,该事件也不会触发
window.onpopstate = function (event) {
console.log('location: ' + document.location);
console.log('state: ' + JSON.stringify(event.state));
}; // 或者
window.addEventListener('popstate', function(event) {
console.log('location: ' + document.location);
console.log('state: ' + JSON.stringify(event.state));
});
回调函数的参数是一个event事件对象
它的 state属性指向 pushState 和 replaceState 方法为当前 URL 所提供的状态对象(即这两个方法的第一个参数)
这个 state 对象也可以直接通过 history 对象读取
var currentState = history.state;
注意,页面第一次加载的时候,浏览器不会触发popstate事件
BOM 浏览器对象模型_当前窗口的浏览历史 history 对象的更多相关文章
- BOM 浏览器对象模型_不超过 4 KB 的 document.cookie 对象
注意: 客户端储存应该使用 Web storage API 和 IndexedDB,不推荐使用 Cookie document.cookie 对象 是服务器保存在浏览器的一小段文本信息 用于读写当前网 ...
- BOM 浏览器对象模型_同源限制
“同源政策”(same-origin policy) 浏览器安全的基石 协议相同 域名相同 端口相同 1995年,同源政策由 Netscape 公司引入浏览器.目前,所有浏览器都实行这个政策 A 网页 ...
- BOM 浏览器对象模型_渲染引擎_JavaScript 引擎_网页加载流程
1. 浏览器核心的两个组成部分 渲染引擎 将网页代码渲染为用户视觉可以感知的平面文档 分类: Firefox Gecko 引擎 Safari WebKit 引擎 Chrom ...
- BOM浏览器对象模型
访问和操作浏览器窗口的模型称为浏览器对象模型BOM(Browser Object Model). BOM整体对象图. 核心是window对象: 以下有特殊双重身份: window对象既是ECMAScr ...
- 第一百一十一节,JavaScript,BOM浏览器对象模型
JavaScript,BOM浏览器对象模型 学习要点: 1.window对象 2.location对象 3.history对象 BOM也叫浏览器对象模型,它提供了很多对象,用于访问浏览器的功能.BOM ...
- javascript高级程序设计第3版——第8章 BOM(浏览器对象模型)
第八章,浏览器对象模型 主要介绍了window的几个对象以及框架,窗口的关系,各个浏览器对象的属性以及方法:
- JavaScript——BOM(浏览器对象模型),时间间隔和暂停
BOM(浏览器对象模型):能够对浏览器的窗体进行訪问和操作 1.主要的BOM体系: window------------document-------------------------------- ...
- js BOM浏览器对象模型
BOM即Browser Object Model,浏览器对象模型,表示浏览器窗口,所有js全局对象.函数以及变量均是window 对象的成员. 对于不同的浏览器,表示宽度和高度的方法不同: 对于IE9 ...
- BOM——浏览器对象模型(Browser Object Model)
什么是BOM? BOM是Browser Object Model的缩写,简称浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对 ...
随机推荐
- matlab中randi代替randint生成随机均匀分布信号的用法
%%新函数 2*randi([0,1],2,1)-1 等价于老函数 2*randint(2,1)-1 函数形式:randi([imin,imax],m,n) 参数解释: [imin,im ...
- C# 另一种提交表单
一般提交表单的方式就是:Get,Post 以及关联action 今天看了一种方式感觉不错: 可以在submit里面写 PostBackUrl="XXXX",即回发的URL,可以实现 ...
- 无连接运输的UDP、可靠数据传输原理、面向连接运输的TCP
由[RFC 768]定义的UDP只是做了运输协议能够做的最少工作.除了复用/分解功能极少量的差错检测外,它几乎没有对IP增加别的东西.如果应用程序开发人员选择UDP而不是TCP,则该应用程序差不多就是 ...
- ArcGis Classic COM Add-Ins插件开发的一般流程 C#
COM add-ins是我对这种开发方式的称呼,Esri的官方文档里称其为“Extending ArcObject”或者“Classic COM extensibility”,Esri所称的addin ...
- [再寄小读者之数学篇](2014-10-18 利用 Lagrange 中值定理求极限)
试求 $$\bex \vlm{n}n^2\sex{x^\frac{1}{n}-x^\frac{1}{n+1}},\quad x>0. \eex$$ 解答: $$\beex \bea \mbox{ ...
- java(10)类的无参方法
一.变量的作用域(有效的使用范围) 1.变量有2种 1.1成员变量(属性) 声明在类的里面,方法的外面 1.2 局部变量 声明在方法里面或for循环结构中 2.调用时的注意事项(初始值不同.作用域不同 ...
- 算法时间计算:logA(N)与O(n)
算法运行时间估算常见O(log(n))log:求对数例:a^b=na为底数,b为n的对数记作:logA(n)=b ->求N的对数 计算器验算:计算器的log默认以10为底 输入 10,log ...
- Kotlin 的优缺点
从Android 7.0开始,谷歌使用的API从Oracle JDK切换到了open JDK,这对于谷歌来说是一个艰难的决定.对于开发者来说,却倍感兴奋,这意味着长期的官司问题也许就此结束,Andro ...
- CSP应用开发-CryptAPI函数库介绍
基本加密函数为开发加密应用程序提供了足够灵活的空间.所有CSP的通讯都是通过这些函数.一个CSP是实现所有加密操作的独立模块.在每一个应用程序中至少需要提供一个CSP来完成所需的加密操作.如果使用多于 ...
- 全平台网页播放器兼容H5与Flash还带播放列表
许久不发文了,2018年第一篇文章,写点干货--关于网页播放器的问题.嗯,实际上我是在52破解首发的,当做新人贴. 目前来说,网页播放器不少,随便找找都能找到一大堆,然而好用的就那么几个,比如ckpl ...