history对象

Posted yourdid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了history对象相关的知识,希望对你有一定的参考价值。

浏览器窗口有一个history对象,用来保存浏览历史。如果当前窗口先后访问了3个网址,那么history对象就包括三项,history.length属性=3

history对象提供了一系列方法,允许在浏览历史之间移动。具体说明如下

back():移动到上一个访问页面,等同于浏览器的后退键

forward():移动到下一个访问页面,等同于浏览器的前进键

go():接受一个整数作为参数,移动到该整数指定的页面,如go(1)相当于forward(),go(-1)相当于back()

如果移动的位置超出了访问历史的边界,以上3个方法并不报错,而是默默失败

history.go(0)相当于刷新当前页面。如:

history.go(0)

常用的“返回上一页”连接,代码如下:

docuement.getElementById(‘backLink‘).onclick=function()

{

window.history.back();

}

实现无刷新浏览:

html5为history对象添加了两个新方法,history.pushState()和history.replaceState(),用来在历史中添加和修改记录,用法如下:

if(!!(window.history&&history.pushState))

{

//支持History API

}

else

{

//不支持

}

上述代码可以用来检查,当前浏览器是否支持History API.如果不支持,可以考虑使用polyfill库的History.js

1.history.pushState()

此方法接受3个参数,依次如下:

state:一个与指定网址相关的状态对象,popstate事件触发时,该对象会传入回调函数。如果不需要这个对象,此处可以填null

title:新页面的标题,但是所有的浏览器目前都忽略这个值,因此这里可以填null

url:新的网址,必须与当前页面处在同一个域。浏览器的地址栏将显示这个网址。

var stateObj={foo:"bar"};

history.pushState(stateObj,‘page2‘,‘2.html‘)

添加上面这个新记录后,浏览去地址栏立刻显示example.com/2.html,但并不会跳转到2.html,甚至也不会检查2.html是否存在,它只是成为浏览历史中的最新记录。这时在地址栏输入一个新的地址,如访问google.com,然后单击倒退按钮,页面的URL讲显示2.html;再单击一次倒退按钮,URL将心事1.html

总之,pushState()方法不会触发页面刷新,只是导致history对象发生变化,地址栏会有反应。

如果pushState的url参数设置了一个新的锚点值(即hash),并不会触发hashchange事件。如果设置了一个跨域网址,则会报错,这样设计的目的是,防止恶意代码让用户以为他们是在另一个网站上。

2.history.replaceState()

history.replaceState()方法的参数与pushState()方法一模一样,区别是它修改浏览历史中的当前记录。例如,当前网页是example.com/example.html

history.pushState({page:1},‘title 1‘,‘?page=1‘);

history.pushState({page:2},‘title 2‘,‘?page=2‘);

history.replaceState({page:3},‘title 3‘,‘?page=3‘)

history.back()            //url显示为http://example.com/example.html?page=1

history.back()            //url显示为http://example.com/example.html

3.history.state 属性

history.state属性返回当前页面的state对象。例如:

history.pushState({page:1},‘title 1‘,‘?page=1‘)

history.state// {page:1}

4.popstate事件

每当同一个文档的浏览历史(history对象)出现变化时,就会触发popstate事件

注意:仅仅调用pushState()方法或replaceState()方法时,并不会触发该事件,只有用户单击浏览器倒退按钮和前进按钮,或者使用javascript调用back,forward,go方法时才会触发。另外该事件只针对同一个文档,如果通过“浏览历史列表”的信息来加载不同的文档,该事件也不会被触发。

使用时,可以为popstate事件指定回调函数

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));

})

var currentState=history.state;

关于这个属性   也有一些理论  详情看书

5.URLSearchParams API

URLSearchParams API用于处理URL中的查询字符串,即问号之后的部分。没有部署这个PI的浏览器,可以用url-search-params这个垫片库。

例如:

var paramsString=‘q=URLUtils.searchParams&topic‘;

var searchParams=new  URLSearchParams(paramsString);

URLSearchParams有以下的方法,用来操作某个函数

URLSearchParams有以下方法,用来操作某个参数。

has():返回一个布尔值

get():返回指定参数的第一个值

getAll():返回一个数组,成员是指定参数的所有值

set():设置指定参数

delete():删除指定参数

append():在查询字符串中,追加一个键值对

toString():返回整个查询字符串

URLSearch还有3个方法,用来遍历所有参数

keys():遍历所有参数名

values():遍历所有参数值

entries():遍历所有参数的键值对

URLSearchParams还有3个方法,用来遍历所有参数。

keys():遍历所有参数名

values():遍历所有参数值

entries():遍历所有参数的键值对

var searchParams=new URLSearchParams(‘key1=value1&key2=value2‘);

for(var key of searchParams.keys())

{

console.log(key);

}

//key1

//key2

for(var value of searchParams.values())

{

console.log(value);

}

//value1

//value2

for(var pair of searchParams.entries())

{

console.log(pair[0]+‘,‘+pair[1]);

}

//key1,value1

//key2,value2

 

以上是关于history对象的主要内容,如果未能解决你的问题,请参考以下文章

History 对象

screen对象和history对象

浏览器history对象

浏览器history对象

history对象

JS-BOM编程之history对象