问题描述
ios内嵌h5页面,从a页面跳转到b页面,b页面设置了缓存,然后走h5的返回,到a页面时,a页面无法获取到缓存
问题原理
其实并不是a页面拿不到缓存,而是因为ios的缓存机制造成。返回本页面时,页面没有重新请求,所以你拿到的缓存实际是你第一次进入本页面时拿到的缓存值,所以自然无法走得通。
解决办法
通过windows页面监听,监听页面隐藏显示,当从另一个页面返回时,刷新当前页面即可。
var isPageHide;
if (checkDevice() == "iOS") { //checkDevice()是一个判断设备类型的方法
isPageHide = false;
window.addEventListener('pageshow', function () {
if (isPageHide) {
window.location.reload();
}
});
window.addEventListener('pagehide', function () {
isPageHide = true;
});
}
附带一个我用的获取设备类型的方法:checkDevice()吧,有需要自取。
function checkDevice() {
var ua = window.navigator.userAgent.toLowerCase();
var u = navigator.userAgent;
u = u.toLowerCase();
if (u.indexOf('android') != -1) {
// 安卓端
return 'android';
} else if (ua.match(/mingtang_ios/) == "mingtang_ios") {
return 'iOS';
}
return 'other';
}