共计 853 个字符,预计需要花费 3 分钟才能阅读完成。
问题描述: A 页面跳转到 B 页面, 在 B 页面进行了相关的操作之后, 返回到 A 页面,A 页面的数据没有刷新. 具体实例: 原因分析: 一.android 浏览器 包括微信的开发者工具 都是 ok 的返回可以刷新页面但是唯有 iOS 不行. 二.iOS 浏览器原因:history.go(-1)返回上一页后,页面内容并不会刷新。在 B 页面修改的内容,返回到 A 时并没有更新新的内容,必须手动刷新。在 Debug 模式下,发现在 iOS 浏览器中,返回上一页后,页面的 JS 代码并未执行。我们猜测可能是缓存引起的,于是使用 meta 禁止了缓存,但仍然没有效果。于是进一步猜测可能是浏览器内部机制导致——iOS 为了提升浏览网页的效率,可能给已浏览过的网页添加一个类似快照的东西,当点击返回按钮后,直接调用快照展示给用户,省去了执行 JS 这一步骤 (纯静态文件依然被缓存)。这本来是 iOS 的优势, 在这却变成了 bug 存在的风险. 三. 页面数据是通过 ajax 请求后台数据,通过链接跳到下一页,然后返回,最常用的返回上一页的方法:history.go(-1) 和 history.back(), 在 android 中正常显示上一页,但是在 iOS 中不能正常显示,通过打印返回的数据,发现数据是上一个页面最后请求的数据。解决方法: 在回退后需要刷新的页面加以下 js:
$(function () {
var isPageHide = false;
window.addEventListener(‘pageshow’, function () {
if (isPageHide) {
window.location.reload();
}
});
window.addEventListener(‘pagehide’, function () {
isPageHide = true;
});
})
将上边的代码写在 A 页面的 js 文件中即可实现想要的效果. 如下不需要手动刷新就可以实现
作者:上善_若水链接:https://www.jianshu.com/p/b5c… 来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。