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学习网址备忘
May 29 Javascript
ext 列表页面关于多行查询的办法
Mar 25 Javascript
推荐10 款 SVG 动画的 JavaScript 库
Mar 24 Javascript
微信小程序--组件(swiper)详细介绍
Jun 13 Javascript
vue proxyTable 接口跨域请求调试的示例
Sep 12 Javascript
Node.js使用Express.Router的方法
Nov 14 Javascript
原生JS实现的碰撞检测功能示例
May 18 Javascript
重学JS 系列:聊聊继承(推荐)
Apr 11 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
Nov 15 Javascript
vue setInterval 定时器失效的解决方式
Jul 30 Javascript
Vue中computed和watch有哪些区别
Dec 19 Vue.js
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
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
资料注册后发信小技巧
2006/10/09 PHP
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
php intval函数用法总结
2019/04/14 PHP
js下利用控制器载入对应脚本
2010/07/17 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
JS回调函数基本定义与用法实例分析
2017/05/24 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
Python的Flask框架的简介和安装方法
2015/11/13 Python
Python解析树及树的遍历
2016/02/03 Python
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
python 实现绘制整齐的表格
2019/11/18 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
欧克利英国官网:Oakley英国
2019/08/24 全球购物
轻化专业学生实习自我鉴定
2013/09/20 职场文书
毕业生自我鉴定
2013/12/04 职场文书
2014年环卫工作总结
2014/11/22 职场文书
市场部经理岗位职责
2015/02/02 职场文书
深入理解Pytorch微调torchvision模型
2021/11/11 Python