- 需求的场景描述(希望解决的问题)
当前我们小程序通过页面跳转进入到一个包含web-view的页面,src中的地址就是我们的业务域名地址,里面嵌入的是H5页面,我们通过点击H5页面中的一些链接,跳转到H5页面中的其他页面,无论进入的页面层级有多少层,安卓手机点击左上角都是直接返回到小程序的上一个页面,而不是H5页面里面的上一个页面,苹果支持跳转到上一个页面,安卓的物理返回按钮也支持返回H5的上一级页面。但是此时,点击返回到当初第一次进入H5页面的时候,再点击苹果上的返回按钮或者安卓的物理返回键,H5页面跳转就失控了,直接跳转到其他层级的H5页面。
问题就是小程序的返回按钮完全是黑盒操作,我们没法在web-view做有效的预防直接跳转的判断。
- 希望提供的能力
希望提供返回按钮的监听事件,并返回是否返回上一页这种功能。这样就可以确保点击小程序返回的时候能够对web-view中的H5页面返回进行兼容,更友好一些。
这个问题解决了没有...嵌套多层级h5按钮返回失控...
2022年了 这个问题还没解决
有什么好的解决办法么
把小程序页面的导航栏给干掉,使用h5的导航栏
我们这边H5页面,之前为了在微信公众号那边做了微信专版的H5修改,把H5的返回都去掉了,是为了规避双头的问题。
还有一个问题,即使把上面的返回去掉了,IOS怎么返回?除非是点击上面的关闭。但是我这涉及到H5的多个页面之间的跳转,我返回肯定是需要的。
webview默认有导航栏了。。。其他页面设置自定义导航栏后 都么有。
你说的默认导航栏是返回按钮吗?苹果要是用redirectTo是没有的啊
期待技术团队的解决啊!
试了一下 还是不行。
还有苹果侧滑也是这样,根本没有接口
我能说我昨天为了解决这个问题,苦思冥想带实验折腾了一下午吗
在小程序的框架内,这个问题目前是无解的:尤其还不让自定义顶部导航栏
最有效的解决办法(目前)就是将 跳转的网页内无第二次跳转---但这明显不可能啊!
其实这边昨天实现了这个功能,主要是我们这边没有适配从H5返回小程序页面的代码,昨天我加上适配的代码就可以了。
我们当前从web-view里嵌入H5页面的时候,会绑定返回事件。有的是addEventListener,有的是popstate。代码会判断当前页面缓存中是否有历史页面,如果有,就会返回上一个页面,如果没有,就调用closePage关闭的方法,在关闭的方法里写上小程序的返回navigateBack,这样就能确保返回能够按照我们想要的方式返回。
当然这个前提是,安卓机型,需要从一个页面redirectTo到web-view组件,因为安卓机型的小程序返回按钮是无论如何都是跳转到小程序自己的上一个页面,没有例外。IOS的是可以使用小程序的返回按钮。
(但是现在测试同事用iphoneX测试返回都是空白,完全没有生效,看来又得去看iphoneX怎么适配了。我一个后端开发活生生变成了前端!!!!)
不过还是感谢老铁的技术热情,感谢!
下面是我们的具体部分代码
具体的业务逻辑页面
公共JS
我们的h5页面成型较早而且是完整业务,所以尽量保持不动,但是想来想去,也就是你这种思路在现阶段可行
我们H5页面也是很早的。在app上套用的也是这个页面~~~