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剩余字数计算的代码
Jul 03 Javascript
javascript 添加和移除函数的通用方法
Oct 20 Javascript
js左侧多级菜单动态的解决方案
Feb 01 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
Nov 17 Javascript
全面了解JavaScript的数据类型转换
Jul 01 Javascript
详解js界面跳转与值传递
Nov 22 Javascript
JS声明式函数与赋值式函数实例分析
Dec 13 Javascript
数组Array的一些方法(总结)
Feb 17 Javascript
对vue下点击事件传参和不传参的区别详解
Sep 15 Javascript
vue使用laydate时间插件的方法
Nov 14 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
Apr 27 Javascript
vue实现商品列表的添加删除实例讲解
May 14 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中exec函数和shell_exec函数的区别
2014/08/20 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
jquery 图片轮换效果
2010/07/29 Javascript
js对象的比较
2011/02/26 Javascript
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
Django app配置多个数据库代码实例
2019/12/17 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
python中K-means算法基础知识点
2021/01/25 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
大学生创业项目方案
2014/03/08 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
申请吧主发表的感言
2015/08/03 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers