onpageshow监听页面是否有缓存
onpageshow 监听页面是否是缓存页面
需求:点击A页面跳转至B页面,在B页面点击手机物理回退键或者history.back回退时,需要在A页面判断当前页面是否是回退回来的页面,而不是新加载的。这里用到一个
onpageshow 事件。
定义和用法
onpageshow 事件在用户浏览网页时触发。
onpageshow 事件类似于 onload 事件,onload 事件在页面第一次加载时触发, onpageshow 事件在每次加载页面时触发,即 onload 事件在页面从浏览器缓存中读取时不触发。
为了查看页面是直接从服务器上载入还是从缓存中读取,你可以使用 PageTransitionEvent 对象的 persisted 属性来判断。 如果页面从浏览器的缓存中读取该属性返回 ture,否则返回 false
是否支持冒泡: | No |
---|---|
是否可以取消: | No |
事件类型: | PageTransitionEvent |
支持的 HTML 标签: | <body> |
以下是几种使用方式:
1。直接在HTMl中使用,注意只能在body上进行事件注册
<body onpageshow="myFunction(event)">
<p>该实例演示了如何向 body 元素添加 "onpageshow" 事件。</p>
<h1 id="demo"></h1>
<script>
function myFunction() {
alert("页面是否从浏览器缓存中加载? " + event.persisted);
}
</script>
2.JS中通过元素获取绑定在body上
document.getElementsByTagName("BODY")[0].onpageshow = function() {myFunction()};
3.在window上注册这个方法
window.addEventListener("pageshow", myFunction);
function myFunction(event) {
alert("页面是否从浏览器缓存中加载? " + event.persisted);
}.
通过以上方法,可以满足需求,也能判断当前页面是否是缓存页面。。。event的很多属性都有点意思。。
window.onpageshow = function (event) { if (event.persisted) { window.location.reload(); } };