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
javascript生成随机颜色示例代码
May 05 Javascript
Javascript实现单张图片浏览
Dec 18 Javascript
jQuery中:only-child选择器用法实例
Jan 03 Javascript
JavaScript中的splice()方法使用详解
Jun 09 Javascript
AngularJs 弹出模态框(model)
Apr 07 Javascript
Javascript HTML5 Canvas实现的一个画板
Apr 12 Javascript
类似于QQ的右滑删除效果的实现方法
Oct 16 Javascript
node.js实现回调的方法示例
Mar 01 Javascript
详解原生js实现offset方法
Jun 15 Javascript
JS获取填报扩展单元格控件的值的解决办法
Jul 14 Javascript
npm配置国内镜像资源+淘宝镜像的方法
Sep 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
PHP VS ASP
2006/10/09 PHP
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
2017/03/28 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
javascript中强制执行toString()具体实现
2013/04/27 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
python中Switch/Case实现的示例代码
2017/11/09 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
Django 路由控制的实现代码
2018/11/08 Python
linux环境下Django的安装配置详解
2019/07/22 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
逻辑链路控制协议
2016/10/01 面试题
2014年自我评价
2014/01/04 职场文书
开会迟到检讨书
2014/02/03 职场文书
销售主管岗位职责范本
2014/02/14 职场文书
小学教师培训方案
2014/06/09 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
部队个人年终总结
2015/03/02 职场文书
使用python创建股票的时间序列可视化分析
2022/03/03 Python
Python之matplotlib绘制折线图
2022/04/13 Python
配置nginx负载均衡
2022/05/06 Servers
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python