JS实现返回上一页并刷新页面的方法分析


Posted in Javascript onJuly 16, 2019

本文实例讲述了JS实现返回上一页并刷新页面的方法。分享给大家供大家参考,具体如下:

正常情况下我们通过 history.back() 或者 history.go(-1) 返回上一级页面的时候,是不会刷新页面的。这种不刷新页面包含两种情况:

  1. 在 android 或者 pc 浏览器中看到的页面有刷新的效果,其实不是这样的,这个时候的所有的资源都是从缓存中加载来的。我们通过浏览器调试工具可以看到 from disk cache 或者 from memory cache
  2. 在 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事件。既然能进入这个函数,那就得想办法在这个函数里判断是否需要刷新页面。可以通过缓存的方式 localStoragesessionStoragecookie

要在页面中判断是否需要刷新,那就得在从下一级返回过来的时候,往 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');
});

注意:

1. 在下一级页面返回的时候,要标记需要刷新页面(set)

2. 在判断完成后,一定要删除之前的存储(remove)避免出现无限重载的情况

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
基于jquery的二级联动菜单实现代码
Apr 25 Javascript
js中this用法实例详解
May 05 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
Jan 18 Javascript
JavaScript希尔排序、快速排序、归并排序算法
May 08 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
Jul 14 Javascript
jQuery实现的右下角广告窗体跟随效果示例
Sep 16 Javascript
JS监控关闭浏览器操作的实例详解
Sep 12 Javascript
基于three.js编写的一个项目类示例代码
Jan 05 Javascript
Javascript中弹窗confirm与prompt的区别
Oct 26 Javascript
vue 地图可视化 maptalks 篇实例代码详解
May 21 Javascript
15 分钟掌握vue-next响应式原理
Oct 13 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
Aug 07 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
Jul 16 #Javascript
微信小程序-API接口安全详解
Jul 16 #Javascript
jquery实现垂直无限轮播的方法分析
Jul 16 #jQuery
JavaScript解析JSON数据示例
Jul 16 #Javascript
微信小程序 Storage更新详解
Jul 16 #Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 #Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
Jul 16 #jQuery
You might like
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
python 实现生成均匀分布的点
2019/12/05 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
Python中有几个关键字
2020/06/04 Python
python实现数字炸弹游戏程序
2020/07/17 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
优秀学生干部个人的自我评价
2013/10/04 职场文书
我的大学生活职业生涯规划
2014/01/02 职场文书
《童年的发现》教学反思
2014/02/14 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
个人简历求职信范文
2015/03/20 职场文书
对学校的意见和建议
2015/06/04 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
PHP遍历数组的6种方式总结
2021/11/17 PHP