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效率调优经验
Jun 04 Javascript
jquery png 透明解决方案(推荐)
Aug 21 Javascript
js下判断 iframe 是否加载完成的完美方法
Oct 26 Javascript
JavaScript控制Session操作方法
Jan 17 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
深入理解setTimeout函数和setInterval函数
May 20 Javascript
浅谈String.valueOf()方法的使用
Jun 06 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
Jan 20 Javascript
socket.io实现在线群聊功能
Apr 07 Javascript
layui的table中显示图片方法
Aug 17 Javascript
ES6 let和const定义变量与常量的应用实例分析
Jun 27 Javascript
微信小程序实现点击页面出现文字
Sep 21 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脚本的10个技巧(3)
2006/10/09 PHP
PHP 引用文件技巧
2010/03/02 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
JavaScript的public、private和privileged模式
2009/12/28 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
Python中的类与类型示例详解
2019/07/10 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
python requests.get带header
2020/05/05 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
银行出纳岗位职责
2013/11/25 职场文书
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
《夏夜多美》教学反思
2014/02/17 职场文书
组工干部演讲稿
2014/09/02 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
英文道歉信
2015/01/20 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
六年级情感作文之500字
2019/10/23 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js