小程序webview中,locaiton.reload无效?
发布于 3 年前 作者 sujie 5449 次浏览 来自 官方Issues

场景:

小程序内webview加载web页面,web中做了登录态的拦截器,当登录态失效的情况下会自动走登录(web的登录,不是小程序的)的逻辑,登录成功后会通过locaiton.reload刷新页面,重新获取数据。

相关技术栈: web项目使用React 16.13;小程序是用uni-app相关栈;

设备: 手上测试了ios和几个Android机型都是不行,如果需要相关系统版本我可以提供

// 登录
postLogin(userInfo)
  .then(() => {
    try {
      loginFlag = false;
      // 登录成功后刷新
      history.push('/login-success'); // 临时方案
      // location.reload(); // 无效
    } catch (err) {
      console.log('exec error ', err);
    }
  })
  .catch((err) => {
    loginFlag = false;
    console.log('login error', err);
  });

异常:

页面并没有刷新。

chrome中测试时是正常的,但是在小程序的webview中登录逻辑都走完了,并没有刷新页面。根据log确认,相关代码是执行了的。经过测试,只有在第一个页面会这样,也就是说history.length > 1的时候是可以刷新的,只有在第一个页面才会这样,只要路由有过变化执行reload就是有效的。在其他的问题里,有看到类似的问题,好像是小程序的webview内的什么优化策略。

目前解决方式:

因为项目比较简单,没有复杂的数据结构,并没有使用状态管理库,所以做了个login-success的页面。登录成功后会直接跳转到这个页面,在login-success再goback回去,让页面重新渲染达成目的。

问题:

因为在官方相关中没有看到相关内容,想知道具体原因或者机制。找到更合适的解决方案。

回到顶部