移动端iOS返回上一路由页面白屏

问题描述

1、最近在做H5项目的时候,发现使用history.back()在IOS上返回上一页的时候,会有很严重的bug。我的场景是列表页滚动了超出一屏之后,进入详情页,再点击返回列表页,在iOS上就出现了白屏的现象,但是触屏或者滑一下,页面就又恢复了。

解决方案

使用history.back返回上一页的时候,浏览器会记录页面的滚动位置,而在iOS上面,滚动后返回的时候页面渲染会出现问题,导致白屏。可以利用scrollRestoration属性,它默认是auto,也就是会记录滚动位置(这是H5新增的属性,所以需要判断浏览器是否支持,我实践的是可以兼容大部分移动端机型)

    if ('scrollRestoration' in window.history) {
      window.history.scrollRestoration = 'manual'; // 改为manual之后,就不会记录滚动位置
    }

在列表页渲染完成的生命周期函数里添加以上代码,可以解决白屏问题

2、a页面是一个长列表,我们滑动到某个地方假设为 100px ,点击之后进入到b页面

  • b页面也滚到到100px,产品希望b页面回到顶部
  • 再从b页面回到a页面,这时候浏览器的滚动条会自动回到我们跳转前的位置,也就是 100px 的位置。产品希望回到顶部去

 b页面代码

window.scrollTo && window.scrollTo(0, 0); // 滚动到初始位置

a页面代码

    if ('scrollRestoration' in window.history) {
      window.history.scrollRestoration = 'manual'; // 改为manual之后,就不会记录滚动位置
    }

 

posted @ 2020-12-07 16:36  alisa.huang  阅读(1097)  评论(0编辑  收藏  举报