javascript解决在safari浏览器中使用history.back()返回上一页后页面不会刷新的问题
我们知道,在JavaScript中提供了一个window.history.back()方法用于返回上一页,另外也可以使用window.history.go(-1)返回上一页(跳转)。
在其他的主流浏览器中(Chrome、Firefox等),使用这两个方法都会重新执行返回页面的JS。
这就意味着,当文档加载完成事件函数中有刷新页面的操作代码的情况下,上一个页面会刷新。
但是在Safari浏览器中则情况有一些不同。
在实际测试中,在移动端中Android设备都会刷新,但是在IOS设备的Safari浏览器中却不会,这是因为Safari浏览器不会重新执行返回页面的JS导致的问题。
那么我们就可以通过窗体显示隐藏的监听事件(HTML5中新增的onpageshow和onpagehide)来对页面进行手动刷新操作。
$(function () {
var isPageHide = false;
window.addEventListener('pageshow', function () {
if (isPageHide) {
window.location.reload();
}
});
window.addEventListener('pagehide', function () {
isPageHide = true;
});
})
将上面这段代码添加在文档加载完成事件中,就能在返回上一页的时候触发窗体刷新的方法了。
这里有一些疑问,既然说这个问题是因为Safari浏览器返回上一页不会重新执行返回页面的JS导致的,为什么上面这段JS代码也会被执行呢,这里简单说一下原因。
在Safari浏览器中,有一个bfcache(Back-Forward Cache,往返缓存)缓存整个页面的特性。当页面在bfcache中的时候,由于内存中保存了整个页面的状态,当从内存中再次取出该页面的情况下,也就不会再触发load事件了。而不同于onload事件只会在文档加载完成之后执行一次,onpageshow事件和onpagehide事件一旦被绑定了,在每次窗体显示隐藏都会被执行。这就意味着,不管页面在不在bfcache中,这两个监听事件都会被执行。另外JavaScript中的PageTransitionEvent对象还提供了一个persisted布尔值属性来判断页面是否从缓存中读取。
window.addEventListener('pageshow', function (e) {
console.log(e.persisted);
});
如果该页面是从缓存中读取出来的,则打印true,否则打印false。
"表面越是波澜不惊的人,内心越是有一些不为人知的辛酸。"
javascript解决在safari浏览器中使用history.back()返回上一页后页面不会刷新的问题的更多相关文章
- js中的referrer使用,返回上一页
js完整代码: <script language="javascript"> var refer=document. referrer ; document.g ...
- android studio中Fragment使用webview返回上一页的问题
在Fragment中使用了腾讯的X5 webview,虽然好用,但是在Fragment中传递消息困难,想要返回上一页,还得各种消息传递什么的,麻烦.可是在Fragment中又不能使用onKeyDown ...
- 微信返回上一页,页面中的AJAX的请求,对Get请求无效的解决办法
问题产生原因 最近在做一个微信的项目时,遇到一种很常见的情况,需求是这样的,当用户进入到"我的个人中心"的时候,会有一个点击跳转填写认证资料的按钮,点击此按钮后,会跳转 ...
- js 页面history.back()返回上一页,ios 不重新加载ready的解决办法
参考自 http://blog.csdn.net/hbts_901111zb/article/details/76691900 项目中,主页面有很多输入字段,当由主页跳转到子页面, 将子页面的字段 s ...
- 解决使用window.history.back(),返回上一页后,页面不刷新问题
window.onpageshow = function(event) { if (event.persisted) { window.location.reload(); } }
- 高并发分布式系统中生成全局唯一(订单号)Id js返回上一页并刷新、返回上一页、自动刷新页面 父页面操作嵌套iframe子页面的HTML标签元素 .net判断System.Data.DataRow中是否包含某列 .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数
高并发分布式系统中生成全局唯一(订单号)Id 1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的方式,保留GUID的10个字节,用另6个字节表示GUID生成的时间(D ...
- js中的referrer返回上一页使用介绍
js中的referrer的用法举例. js完整代码: <script language="javascript"> var refer=document.refer ...
- JavaScript返回上一页代码区别
JavaScript返回上一页代码区别: window.history.go(-1); //返回上一页 window.history.back(); //返回上一页 //如果要强行刷新的话就是:win ...
- JavaScript返回上一页和返回上一级页面并刷新
JavaScript返回上一页和刷新当前页 window.history.go(-1); //返回上一页 window.history.back(); //返回上一页 //如果要强行刷新的话就是:wi ...
随机推荐
- Notepad++ 异常崩溃 未保存的new *文件列表没了怎么办?
今天就遇到这种问题了,把之前写的临时代码拷贝到Notepad++,不知道啥时候脑袋一抽风强迫症犯了就把所有临时代码给未保存关闭了,然后懊恼不已,百度了一下解决办法,一下就搜到了. Notepad++是 ...
- java之JavaBean
JavaBean是一种java语言编写而成的可重用组件. 所谓JavaBean,是指符合以下标准的java类: 类是公共的: 有一个无参的公共构造器: 有属性,属性一般是私有的,且有对应的set.ge ...
- Unity ugui屏幕适配与世界坐标到ugui屏幕坐标的转换
我们知道,如今的移动端设备分辨率五花八门,而开发过程中往往只取一种分辨率作为设计参考,例如采用1920*1080分辨率作为参考分辨率. 选定了一种参考分辨率后,美术设计人员就会固定以这样的分辨率来设计 ...
- 03-MySQL安装与配置
一.安装MySQL 1.我的是centos8,因此命令为: sudo yum install mysql-server 2.安装完成后查看是否启动 ps aux|grep mysql 3.启动mysq ...
- 01-linux介绍
一.Linux简介 Linux内核最初只是由芬兰人林纳斯.托瓦兹在大学时出于爱好写出来的,是一套免费使用和自由传播的类Unix操作系统,是基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU ...
- Redis入门(二)-Redis能够做什么
引言 在上篇文章中,我们讲述了Redis的基本知识让读者对Redis有了基本的了解.那么这一节我们就来看一下Redis究竟能做什么. 上一节我们提到了Redis可用作数据库,高速缓存和消息队列代理.这 ...
- 母版页 treeview控件 SiteMapPath控件 treeview数据库绑定模式
母版页就是网站中一样的部分母版页的后缀名是.Master可以把母版页当成一个页面 想让哪里是别的内容就可以 通过如下: <asp:ContentPlaceHolder ID="C ...
- 转:C# String为值类型还是引用类型
关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确.希望能给大家带来点帮助,如果有错误请指出. 来看下面例子: //值类型 int a ...
- jQuery基础之表单验证
在使用jquery-validate.js插件时可以做一些初始化配置在初始化jquery-validate.js对象的时候,将外部的一些配置和该插件内部的一些默认配置合并在一起,如果有相同的配置,前者 ...
- Saltstack_使用指南14_无master
1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...