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滚动加载图片效果的实现
Mar 06 Javascript
JS将表单导出成EXCEL的实例代码
Nov 11 Javascript
JS如何判断移动端访问设备并解析对应CSS
Nov 27 Javascript
Javascript实现Web颜色值转换
Feb 05 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
Sep 20 Javascript
js+div+css下拉导航菜单完整代码分享
Dec 28 Javascript
基于BootStrap实现简洁注册界面
Jul 20 Javascript
AngularJS实现的锚点楼层跳转功能示例
Jan 02 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
Mar 06 Javascript
webpack的CSS加载器的使用
Sep 11 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
Jul 09 Javascript
vue响应式原理与双向数据的深入解析
Jun 04 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
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
python中的内置函数getattr()介绍及示例
2014/07/20 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
python实现Adapter模式实例代码
2018/02/09 Python
python中map的基本用法示例
2018/09/10 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
python如何获取apk的packagename和activity
2020/01/10 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
优秀毕业生自荐信范文
2014/01/01 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
司机辞职报告范文
2014/01/20 职场文书
运动会口号16字
2014/06/07 职场文书
六年级学生评语大全
2014/12/26 职场文书
个人汇报材料范文
2014/12/30 职场文书
终止劳动合同通知书
2015/04/16 职场文书
新生开学寄语大全
2015/05/28 职场文书
计算机教师工作总结
2015/08/13 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
如何使用flask将模型部署为服务
2021/05/13 Python
Go语言怎么使用变长参数函数
2022/07/15 Golang