解决IOS设备浏览器返回或前进时从无法执行某操作
发现在ios设备浏览器中返回上一个页面是从浏览器缓存中读取的,在跳转到另一个页面前的一些操作,如“加载中”,在另一个页面点击返回时“加载中”状态依然存在,相应js并没有触发执行,现在想对浏览器返回是从缓存中读取的也进行取消“加载中”状态。
解决ios返回js不执行
onpageshow 事件在用户浏览网页时触发,onpageshow 事件在每次加载页面时触发(包括在页面从浏览器缓存中读取时)。
window.onpageshow = function(event) {
//TODO
};
//或者
window.addEventListener('pageshow', function(event) {
//TODO
});判断从缓存加载和前进后退
1、为了查看页面是直接从服务器上载入还是从缓存中读取,你可以使用 PageTransitionEvent 对象的 persisted 属性来判断,如果页面从浏览器的缓存中读取该属性返回 ture,否则返回 false 。
2、为了判断网页通过前进或后退按钮加载,你可以使用 window.performance.navigation.type 类型来判断,常量 TYPE_BACK_FORWARD 值为 2 ,是网页通过前进或后退按钮加载。
if(event.persisted || (window.performance &&
window.performance.navigation.type == window.performance.navigation.TYPE_BACK_FORWARD)){
//TODO
}完整demo例子
page1.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>ios history.go(-1) page1</title>
<script type="text/javascript" src="jquery-2.1.4.js"></script>
<script type="text/javascript">
window.onpageshow = function(event){
//是否从浏览器缓存中读取 或 是否网页通过前进或后退按钮加载
if(event.persisted||(window.performance && window.performance.navigation.type==window.performance.navigation.TYPE_BACK_FORWARD)){
hideLoading();
}
};
//或者
//window.addEventListener('pageshow', function(event) {
// if(event.persisted||(window.performance && window.performance.navigation.type==window.performance.navigation.TYPE_BACK_FORWARD)){
// hideLoading();
// }
//});
function jumpPage2(){
showLoading();
window.location.href = 'page2.html';
}
function showLoading(){
$('body').append('<p>正在跳转</p>');
}
function hideLoading(){
$('body').find('p').remove();
}
</script>
</head>
<body>
<h1>这是第一个页面</h1>
<a href="javascript:jumpPage2();">page2.html</a>
</body>
</html>page2.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>ios history.go(-1) page2</title> </head> <body> <h1>这是第二个页面</h1> <a href="javascript:history.go(-1);">返回</a> </body> </html>
测试设备
PC设备浏览器:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36
IOS设备浏览器:
Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Mobile/15E148 Safari/604.1
原创文章,转载请注明出处:https://www.weizhixi.com/article/114.html
