移动端浏览器回退上级页面不执行js的原因和解决方案

您所在的位置:网站首页 zbrush返回上一步失效 移动端浏览器回退上级页面不执行js的原因和解决方案

移动端浏览器回退上级页面不执行js的原因和解决方案

2024-07-17 08:32| 来源: 网络整理| 查看: 265

在开发移动端项目时遇到了一个问题,是关于ios机制和浏览器缓存的。

1. 问题描述

页面逻辑:页面中存在另一个链接,通过链接跳转页面,在点击浏览器导航回退时。发现上级页面会不执行js操作(页面不会重新加载,会直接读取浏览器缓存)

展现结果:返回后页面不刷新,一些失效的信息依然显示在页面上

机型:这个问题会在iphone和部分android内置浏览器(vivo nex内置浏览器、华为荣耀手机)发生。

产出原因:这一切都是页面的缓存数据搞的鬼。什么是页面的缓存数据?浏览器的“往返缓存(back-forward cache - bfcache)”特性。简写是bfcache。这个是firfox提出的叫做"往返缓存"的一种缓存机制,用来加快用户在点击浏览器前进或者后退按钮时的速度。chrome放弃了bfcache,但是ios(webkit)的微信浏览器和safari浏览器还有部分安卓的内置浏览器(webkit)还是存在。bfcache将离开页面时的DOM和JS的状态全都保存了下来,也就是说将整个页面保存了下来放在了页面的缓存当中。

2. 解决方案

首先第一个想到的是onload事件,但是页面从浏览器缓存中读取时不会触发onload事件,只会在第一次进入页面会执行。

onpageshow事件,onpageshow事件会在每次加载页面时触发,跟onload事件有一些相似,但又不完全相似。

无论加载的页面是否来自bfcache,都会触发onpageshow事件。为了查看页面是直接从服务器上载入还是从缓存中读取,可以使用 PageTransitionEvent 对象的 persisted 属性来判断。

如果页面从浏览器的缓存中读取该属性返回 ture,否则返回 false

window.onpageshow = function (e) { console.log(e) if (e.persisted) { // 如果页面是读取缓存 // 执行逻辑... } else { // ... } }


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3