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 {
// ...
}
}
autojs使用jar是可以的。根据查询相关资料信息显示:AutoJS是一款新的手机脚本开发工具,开发语言是JS,开发门槛低,做过网站开发的都会写JS,autojs使用jar是可以的。