History 接口允许操作浏览器的曾经在标签页或者框架里访问的会话历史记录。

js通过window.history来访问和操作的,操作的范围是某个tab的会话历史记录。

这个tab打开后,tab内的跳转或者你手动输入的地址,都在控制范围内。

属性

1. History.length

返回一个整数,该整数表示会话历史中元素的数目,包括当前加载的页。例如,在一个新的选项卡加载的一个页面中,这个属性返回1。

在这里我们想想 history.go(-histoy.length) 会发生什么呢,history.go(-history.length+1) 又会发生什么。

history.go(-histoy.length) 什么都不会发生,因为你最多只能返回 history.length - 1

history.go(-history.length+1) 当然是返回到最初打开的页面

2. History.scrollRestoration

置默认滚动恢复行为,属性可以是自动的(auto)或者手动的(manual),默认值是auto。

就是你看某个网站滚动以后,点击链接进入新页面后,再点击返回的时候,会自动回复到原来的滚动位置。 不然的话我们可能需要记住某个值,然后window.scrollTo或者Element.scrollIntoView。

看到这个就眼前一亮了,滚动恢复,这么好的属性,相见恨晚。

兼容性, PC除了IE和Edge都还好,移动端依旧是IE和Edge,外加 Andriod内置浏览器。

3. History.state

状态值,这个值一般是在histpory.pushState(state,title,url)的第一个参数设置。之后,当地址栏匹配url时,你就可获得对应的state,这个在做前端路由的时候,路由间传参是不是赶脚很有用。

方法

1. go

go(number)

通过当前页面的相对位置从浏览器历史记录。

-1的时候为上一页,参数为1的时候为下一页.

当整数参数超出界限时,例如: 如果当前页为第一页,前面已经没有页面了,我传参的值为-1,那么这个方法没有任何效果也不会报错。

当没有参数的时候或者不是整数的参数时, chrome和firefox下面是相当于刷新, 不会增加访问历史,基本相当于window.location.reload()。

2. History.back

前往上一页, == 点击浏览器左上角的返回按钮

3. History.forward

前往下一页,, == 点击浏览器左上角的前进按钮

4. History.pushState

pushState(state, title ,url)

  • state state 对象可以是任何可以序列化的东西。触发popstate事件时,事件的state属性包含了历史纪录的state对象,当然通过history.state也可以获得当前访问历史记录的state。
  • title 现在大多数浏览器不支持或者忽略这个参数,最好用null代替
  • url 新地址,新URL必须和当前URL在同一个源下。浏览器在调用pushState()方法后不会去加载这个URL,但有可能在之后会这样做,比如用户重启浏览器之后,这个就有点意思了。有人可能会问,这个怎么测试呢,启动chrome,打开任意网站,输入 history.pushState(null,null,'/xx/xx/xx'),然后打开新tab,输入 chrome://restart/, 这个在做单页面程序的时候,解决这种问题,需要结合服务端支持来解决这种问题。之后的文章会说道这个。

4. History.replaceState

replaceState(state, title ,url)

参数和pushState是一样的,不过这方法不会增加新的历史记录,而是替换当前的历史记录。

window的popstate事件

配合window.history使用的还有一个window的popstate事件。

每当处于激活状态的历史记录条目发生变化时,popstate事件就会在对应window对象上触发。

调用history.pushState()或者history.replaceState()不会触发popstate事件,popstate事件只会在浏览器某些行为下触发, 比如点击后退、前进按钮(或者在JavaScript中调用history.back()、history.forward()、history.go()方法).

当网页加载时,各浏览器对popstate事件是否触发有不同的表现, 自己测试的话chrome和firfox的较新版本都不会触发。

 window.onpopstate = function(event) {
setupPage(event.state);
console.log('onpopstate')
}

event.state参数就是我们pushState,replaceState传入的参数。

最后来看一个简单的demo.

History Demo

History | Can I Use

Session history and navigation

Manipulating the browser history

History.js polyfill

History | MDN

popstate

jquery-pjax

Session History 属性和方法的更多相关文章

  1. JS window对象 History 对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能。语法: window.history.[属性|方法]

    History 对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能. 注意:从窗口被打开的那一刻开始记录,每个浏览器窗口.每个标签页乃至每个框架,都 ...

  2. 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具

    查看本章节 查看作业目录 需求说明: 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具 实现思路: 使用history对象中的 forward() 方法和 ...

  3. Session的属性

    Session的属性  Session在网络应用中被称为会话.具体到web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间,因 ...

  4. js浏览器对象的属性和方法

    1.window对象 /*1.计算浏览器窗口大小*/ //不算滚动条: var width = window.innerWidth; var height = window.innerHeight; ...

  5. Action的搭建及application、request、Session的运用 多种方法

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  6. Javascript对象属性与方法汇总

    Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...

  7. Hibernate中Session的几个方法的简单说明

    Hibernate对普通JDBC的操作进行了轻量级的封装,使得开发人员可以利用Session对象以面向对象的思想来实现对关系数据库的操作. 一般通过Configuration对象读取相应的配置文件来创 ...

  8. session设置过期的方法(转载)

    这篇文章主要介绍了php中实现精确设置session过期时间的方法,需要的朋友可以参考下   大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设 ...

  9. 【repost】js window对象属性和方法相关资料整理

    window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval mov ...

随机推荐

  1. 7.3 Models -- Creating And Deleting Records

    一.Creating 1. 你可以通过调用在store中的createRecord方法来创建records. store.createRecord('post', { title: 'Rails is ...

  2. R之内存管理

    引言 R的内存管理机制究竟是什么样子的?最近几日在讲一个分享会,被同学问到这方面的问题,可是到网上去查,终于找到一篇R语言内存管理不过讲的不清不楚的,就拿memory.limit()函数来说,是在wi ...

  3. OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)

    http://blog.csdn.net/dcrmg/article/details/53677739 1. 基于直方图均衡化的图像增强   直方图均衡化是通过调整图像的灰阶分布,使得在0~255灰阶 ...

  4. Python3.x:open()文件操作

    Python3.x:open()文件操作 open/文件操作: #open(路径+文件名,读写模式) #读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式 f=ope ...

  5. 2018-2019-1 20189215 《Linux内核原理与分析》第七周作业

    <庖丁解牛>第六章书本知识总结 操作系统内个实现操作系统的三大管理功能:进程管理.内存管理.文件系统.分别对应<操作系统原理>中最重要的3个抽象概念是进程.虚拟内存和文件. L ...

  6. HDU 1698 Just a Hook(线段树:区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1698 题意:给出1~n的数,每个数初始为1,每次改变[a,b]的值,最后求1~n的值之和. 思路: 区间更新题目 ...

  7. 51Nod 1509 加长棒(隔板法)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1509 思路: 直接去解可行的方法有点麻烦,所以应该用总的方法去减去不可行 ...

  8. jmeter 网速

    有人知道在jmeter 哪个里面哦 JMeterPlugins里面 network

  9. Codeforces Round #404 (Div. 2) A,B,C,D,E 暴力,暴力,二分,范德蒙恒等式,树状数组+分块

    题目链接:http://codeforces.com/contest/785 A. Anton and Polyhedrons time limit per test 2 seconds memory ...

  10. hdu 5683 zxa and xor 暴力

    zxa and xor Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Pro ...