length
history.length 속성은 기록에 URL 수를 저장합니다. 처음에는 이 값이 1입니다. IE10+ 브라우저는 초기에 2를 반환하기 때문에 호환성 문제가 있어 이 값은 일반적으로 사용되지 않습니다
Jump method
go(), back() 및 forward()
이동된 위치가 접근 기록 경계를 초과하는 경우, 위의 세 가지 방법은 오류를 보고하지 않지만 조용히 실패합니다.
[참고] 기록 기록을 사용할 때 서버에 새 웹 페이지를 보내도록 다시 요청하는 대신 일반적으로 브라우저 캐시에서 페이지가 로드됩니다. onload를 트리거하지 않습니다
레코드 추가 및 수정
HTML5는 방문 기록에 레코드를 추가하고 수정하는 데 사용되는 두 가지 새로운 메서드인 History.pushState() 및 History.replaceState()를 기록 개체에 추가합니다. state 속성은 레코드 객체를 저장하는 데 사용되며 popstate 이벤트는 기록 객체의 변경 사항을 모니터링하는 데 사용됩니다
[참고] IE9는 지원하지 않습니다
【pushState()】
history.pushState() 메서드는 다음을 지원하지 않습니다. 브라우저 기록에 대한 상태입니다. pushState() 메소드는 상태 객체, 제목(현재는 무시됨) 및 선택적 URL 주소의 세 가지 매개변수를 사용합니다. pushState() 메소드에 의해 생성된 기록에. 사용자가 새로운 상태로 이동하면 popstate 이벤트가 트리거됩니다. 이벤트의 상태 속성에는 기록의 상태 개체가 포함되어 있습니다. 이 개체가 필요하지 않은 경우 null
title - 새 페이지의 제목을 입력할 수 있지만 현재 모든 브라우저는 이 값을 무시하므로 null
URL을 입력할 수 있습니다. - 이 매개변수는 페이지의 주소를 제공합니다. 새로운 역사 기록 . 새 URL은 현재 URL과 동일한 도메인에 있어야 합니다. 그렇지 않으면 pushState()에서 예외가 발생합니다. 이 매개변수는 별도로 표시되지 않은 경우 현재 문서의 URL로 설정됩니다. 현재 URL이 example.com/1.html이라고 가정하면 pushState 메소드를 사용하여 탐색에 새 레코드를 추가합니다. Record(history 객체).
var stateObj = { foo: 'bar' }; history.pushState(stateObj, 'page 2', '2.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 history.go(2) // url显示为http://example.com/example.html?page=3
history.pushState({page: 1}, 'title 1', '?page=1'); history.state// { page: 1 }
var currentState = history.state;
pageshow事件在页面加载时触发,包括第一次加载和从缓存加载两种情况。如果要指定页面每次加载(不管是不是从浏览器缓存)时都运行的代码,可以放在这个事件的监听函数
第一次加载时,它的触发顺序排在load事件后面。从缓存加载时,load事件不会触发,因为网页在缓存中的样子通常是load事件的监听函数运行后的样子,所以不必重复执行。同理,如果是从缓存中加载页面,网页内初始化的JavaScript脚本(比如DOMContentLoaded事件的监听函数)也不会执行
[注意]虽然这个事件的目标是document,但必须将其事件处理程序添加到window
pageshow事件有一个persisted属性,返回一个布尔值。页面第一次加载时或没有从缓存加载时,这个属性是false;当页面从缓存加载时,这个属性是true
[注意]上面的例子使用了私有作用域,以防止变量showCount进入全局作用域。如果单击了浏览器的“刷新”按钮,那么showCount的值就会被重置为0,因为页面已经完全重新加载了
【pagehide】
与pageshow事件对应的是pagehide事件,该事件会在浏览器卸载页面的时候触发,而且是在unload事件之前触发。与pageshow事件一样,pagehide在document上面触发,但其事件处理程序必须要添加到window对象
[注意]指定了onunload事件处理程序的页面会被自动排除在bfcache之外,即使事件处理程序是空的。原因在于,onunload最常用于撤销在onload中所执行的操作,而跳过onload后再次显示页面很可能就会导致页面不正常
pagehide事件的event对象也包含persisted属性,不过其用途稍有不同。如果页面是从bfcache中加载的,那么persisted的值就是true;如果页面在卸载之后会被保存在bfcache中,那么persisted的值也会被设置为true。因此,当第一次触发pageshow时,persisted的值一定是false,而在第一次触发pagehide时,persisted就会变成true(除非页面不会被保存在bfcache中)
window.onpagehide = function(e){ e = e || event; console.log(e.persisted); }
使用方法:
1、取消默认的返回操作
function pushHistory(){ var state = { title: "title", url: "#" } window.history.pushState(state, "title", "#"); } pushHistory()
2、history.js用于兼容html4,也可以监听pushState与replaceSate
위 내용은 자바스크립트에서 History 객체를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!