最近在开发小程序,部分业务使用到 h5(技术栈:Vue+Vue-Router,hash 模式),从小程序A页面,跳转到 H5 的B页面,B 再跳转到 C,在 C 页面使用 history.back 或 router.back 无法返回 B页面,点击 Navbar 的返回,直接返回到 A 页面问题。发现好多同学也遇到了此类问题:https://developers.weixin.qq.com/community/develop/doc/000086ff4b81188a8c1b782695b400?_at=1641620051949
通过在 h5 上打印 history.length 日志,发现了无法返回的原因,在打开两个页面时,history.length 大于2时,无法正常返回,经过分析,发现这样写小程序web-view组件时,必然会出现无法返回:
Page {
data: {
url: null,
},
onLoad(options){
const {url} = options;
setTimeout(() => {
//do something
this.url = url;
},duration) ;
},
}
如果按以上的写法,恭喜你,中招了,这样打开 h5后,history.back 或 router.back 会无效。原因是 url 为空时,web-view 加载了一次,当获取真实的url时,又加载了一遍,这必然导致了 history 栈的错乱,导致了 web-view 处理 history.back 或 router.back 无效。web-view 到底如何处理 back ,这个核心逻辑就无从得知了。
解决方案:
这样即可,保证了web-view只加载一次。 onLoad 没有延时获取 url,会不会出现该问题,暂时没有去研究。但建议还是做个 if 判断,拿到 url 后,在去渲染 web-view 就没大错。
?????????????????????????????
请问解决方案这边写的是什么?
我这里还是不行诶,加了v-if去判断都不行
完美解决,nice