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学习笔记1 数据类型
Jan 11 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
Jan 24 Javascript
ajax读取数据后使用jqchart显示图表的方法
Jun 10 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
Jul 27 Javascript
JS快速实现移动端拼图游戏
Sep 05 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
Jul 08 jQuery
Node.js 使用递归实现遍历文件夹中所有文件
Sep 18 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
Jun 05 Javascript
JavaScript怎样在删除前添加确认弹出框?
May 27 Javascript
jquery 时间戳转日期过程详解
Oct 12 jQuery
JavaScript Window浏览器对象模型原理解析
May 30 Javascript
用js实现放大镜效果
Oct 28 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
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
2017/10/17 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
python字符串替换的2种方法
2014/11/30 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
python 命名规范知识点汇总
2020/02/14 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
学校后勤人员职责
2013/12/27 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
《老山界》教学反思
2014/04/08 职场文书
政协工作总结2015
2015/05/20 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书
《雷雨》教学反思
2016/02/20 职场文书
Spring Boot 整合 Apache Dubbo的示例代码
2021/07/04 Java/Android