移动端的开发的时候经常修改了内容,返回的时候值还没变化。所以,返回时返回的页面需要刷新。
在这里分享给大家供大家参考,具体如下:
正常情况下我们通过 history.back()
或者 history.go(-1)
返回上一级页面的时候,是不会刷新页面的。这种不刷新页面包含两种情况:
-
在 android 或者 pc 浏览器中看到的页面有刷新的效果,其实不是这样的,这个时候的所有的资源都是从缓存中加载来的。我们通过浏览器调试工具可以看到 from disk cache 或者 from memory cache。
-
在 ios 中甚至于返回到了上一页后,连上一页的脚本文件都没有执行; (其实不是没有执行,是执行了
onpageshow
)
上网搜索 ios 返回上一页并刷新页面的时候,会看到的解决方案有监听 onpageshow
事件, 通过查看文档可以知道 onpageshow
事件中,可以通过使用 PageTransitionEvent 对象的 persisted 属性来判断,页面是直接从服务器上载入还是从缓存中读取; 如果页面从浏览器的缓存中读取该属性返回 ture,否则返回 false。
在 ios 中如果要实现,返回上一页并刷新页面的话,可以在上一页的脚本文件中加入如下代码:
window.addEventListener("pageshow", function(event) {
if(event.persisted) { // ios 有效, android 和 pc 每次都是 false
sessionStorage.removeItem("refresh");
location.reload();
}
});
但是这种方式在 android 和 pc 的浏览器中没有效果,经过尝试会发现 android 和 pc 的浏览器中每一次进入 pageshow事件后,event.persisted 永远都是返回 false。
不管是在任何情况下,都会监听到 pageshow事件。既然能进入这个函数,那就得想办法在这个函数里判断是否需要刷新页面。可以通过缓存的方式 localStorage 或 sessionStorage 或 cookie。
要在页面中判断是否需要刷新,那就得在从下一级返回过来的时候,往 cache中存入需要刷新。
sessionStorage.setItem("refresh", "true");
history.go(-1);
然后在上一级也页面获取并判断
if(sessionStorage.getItem("refresh") === "true") {
sessionStorage.removeItem("refresh");
location.reload();
}
综合兼容所有设备的返回上一页并刷新页面的方式为:(需要添加在刷新的页面。也可以放在通用中。只是返回哪个页面哪个页面就刷新。)
window.addEventListener("pageshow", function(event) {
if(event.persisted) { // ios 有效,android 和 pc 每次都是 false
location.reload();
} else { // ios 除外
if(sessionStorage.getItem("refresh") === "true") {
location.reload();
}
}
sessionStorage.removeItem("refresh");
});
以下是我写的需要返回上级或上上级页面方法
//默认不传是返回上一级页面,level是负整数(-1,-2,-3,...)
function gobackfresh(level){
sessionStorage.setItem("refresh", "true");
if(typeof(level)=="undefined"){
history.go(-1);
}
else{
history.go(level);
}
}
注意:
1. 在下一级页面返回的时候,要标记需要刷新页面(set)
2. 在判断完成后,一定要删除之前的存储(remove)避免出现无限重载的情况