仅个人猜测,不喜勿喷
问题是这样的,我项目中的页面都是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也有兼容性问题,一直没修复好,每次更新后都要改几句代码,累啊!