android后退功能的复用,关于官方这套框架在android上返回键功能的bug以及相关分析...

仅个人猜测,不喜勿喷

问题是这样的,我项目中的页面都是template 子页面的形式,以下简称webview,所有的webview都有设置preload属性;

如果我用webview打开一个第三方页面(如www.baidu.com),然后按返回键,一切正常,因为template的backbutton事件被触发了,mui监听了该事件,并对webview进行了隐藏;

如果我再用这个webview打开一个我自己写的页面(包含mui.js),然后按返回键,一切正常,因为子页面的backbutton事件被触发了,mui监听了该事件,并通过evalJS告诉了template,然后template中的mui对webview进行了隐藏;

接下来问题来了,我再用这个webview打开第三方页面,然后按返回键,nothing happen。。。。

之前有在论坛里提这个问题,但是得到想要的答复,所以就自己研究了一下

我猜大概是这样的

backbutton事件为系统级事件,只会被分发到一个webview,如果有多个webview通过plus.key对该事件进行了监听,按返回键时,也只有最顶层(猜测)的那一个webview能接收到事件;

所以当我第一次用webview打开www.baidu.com的时候,template为最顶层的那个webview(百度的界面没有监听backbutton事件);

然后我再用这个webview打开自己的一个页面时,因为子页面加载了mui.js,所以子页面监听了backbutton事件,并成为了最顶层的那个webview,按返回键时,事件会被发到该子页面中;

最我再次加载www.baidu.com的时候,这个子页面依然是最顶层,依然监听了backbutton事件(该事件是通过plus,key绑定在webview上的,不会随之前的html销毁),所以按返回键时,事件依然被分发到了该子页面, 然而百度自然对这个事件不感兴趣,没加监听,所以什么都没发生

如果在加载新界面之前,把之前绑定的backbutton事件移除掉,就没问题了,但是要改mui的源码,因为绑定的那个事件是mui里的一个内部变量

官方看好不好从框架的层面上解决,好解决的话我就等一等,不好解决的话就改一改源码,locker.js也有兼容性问题,一直没修复好,每次更新后都要改几句代码,累啊!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值