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 相关文章推荐
JS提交并解析后台返回的XML的代码
Nov 03 Javascript
浅析XMLHttpRequest的缓存问题
Dec 13 Javascript
什么是cookie?js手动创建和存储cookie
May 27 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
Jan 09 Javascript
Javascript中的方法和匿名方法实例详解
Jun 13 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
Jan 14 Javascript
canvas绘制表盘时钟
Jan 23 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
Sep 28 Javascript
小程序实现展开/收起的效果示例
Sep 22 Javascript
JavaScript监听键盘事件代码实现
Jun 03 Javascript
js实现表单项的全选、反选及删除操作示例
Jun 05 Javascript
VUE实现吸底按钮
Mar 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
Zend studio文件注释模板设置方法
2013/09/29 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
原生js实现日期联动
2015/01/12 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
详解django.contirb.auth-认证
2018/07/16 Python
opencv python 图像去噪的实现方法
2018/08/31 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
使用python模拟命令行终端的示例
2019/08/13 Python
python实现银行管理系统
2019/10/25 Python
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
财务会计自荐信范文
2014/02/21 职场文书
毕业生就业意向书
2014/04/01 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
2015年导购员工作总结
2015/04/25 职场文书
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android
Python利用FlashText算法实现替换字符串
2022/03/31 Python
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL