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 相关文章推荐
javascript引用对象的方法代码
Aug 13 Javascript
jQuery 表单验证扩展代码(二)
Oct 20 Javascript
JavaScript 浏览器对象模型BOM使用介绍
Apr 13 Javascript
基于jQuery实现音乐播放试听列表
Apr 14 Javascript
浅析JavaScript回调函数应用
May 22 Javascript
js实现获取鼠标当前的位置
Dec 14 Javascript
react router 4.0以上的路由应用详解
Sep 21 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
Sep 26 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
Dec 06 Javascript
小程序文字跑马灯效果
Dec 28 Javascript
javascript实现雪花飘落效果
Aug 19 Javascript
前端如何实现动画过渡效果
Feb 05 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
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
vue组件间通信解析
2017/03/01 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
node使用request请求的方法
2019/12/20 Javascript
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
python在命令行下使用google翻译(带语音)
2014/01/16 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
团日活动总结书格式
2014/05/08 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
会计稽核岗位职责
2015/04/13 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
聘任书格式及范文
2015/09/21 职场文书