雷欧斯
雷欧斯
  • 发布:2015-05-10 18:54
  • 更新:2015-05-18 19:54
  • 阅读:12287

mui打开一个有输入框的页面,当焦点在输入框内,而且输入法面板没有缩回去时候,按返回键,直接返回上一页面了,应该按返回收回输入法面板的呀

分类:MUI
mui
2015-05-10 18:54 负责人:无 分享
已邀请:
我要吃饭

我要吃饭

哈哈,我也遇到了这个问题,不过解决了。思路分析:
有部分手机有这个现象,我遇到的是小米4,华为低端机百度输入法反而没有这种现象。
问题原因:
正常情况下,返回按钮事件应该会被输入法捕捉拦截,不会传到webview里面的。但是有些输入法捕捉返回事件后,退出输入法,然后继续下发返回按钮事件到webview,造成webview执行返回函数。
解决办法:
1.输入法打开和关闭会触发webview的resize事件。resize事件触发时间可以认为是输入法关闭的时间。参考http://ask.dcloud.net.cn/question/4548

  1. 输入关闭后在1秒内触发的返回按钮事件我们都抛弃。

解决代码:
//有输入框,重写返回函数
var time=new Date().getTime();
var o_back=mui.back;
//记录输入法返回时间
window.addEventListener("resize",function(){
time=new Date().getTime();
);
mui.back=function(){
var now=new Date().getTime();
//判断不是是输入法触发的返回事件
if((now-time)>1000){
o_back();//退出
}
}

我要吃饭

我要吃饭

如果是大平板,输入法有可能不会压缩webview的高度,就不触发resize事件。这时换个思路。
在退出函数中:

  1. 判断页面输入框是有获得焦点,没有焦点就退出。
  2. 如果某个 输入框有焦点,可以判断是输入法触发的返回键事件。取消输入框焦点,不执行退出。

这个没有测试过,因为没钱买大平板

该问题目前已经被锁定, 无法添加新回复