BoredApe
BoredApe
  • 发布:2016-01-14 18:10
  • 更新:2020-07-24 15:13
  • 阅读:50570

使用Native.js实现打开页面默认弹出软键盘

分类:Native.js

先来体验下这个神奇的功能(兼容iOS和Android):


此功能需要在模块权限中配置Native.js

var nativeWebview, imm, InputMethodManager;  
var initNativeObjects = function() {  
    if (mui.os.android) {  
        var main = plus.android.runtimeMainActivity();  
        var Context = plus.android.importClass("android.content.Context");  
        InputMethodManager = plus.android.importClass("android.view.inputmethod.InputMethodManager");  
        imm = main.getSystemService(Context.INPUT_METHOD_SERVICE);  
    } else {  
        nativeWebview = plus.webview.currentWebview().nativeInstanceObject();  
    }  
};  
var showSoftInput = function() {  
    if (mui.os.android) {  
        imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);  
    } else {  
        nativeWebview.plusCallMethod({  
            "setKeyboardDisplayRequiresUserAction": false  
        });  
    }  
    setTimeout(function() {  
       //此处可写具体逻辑设置获取焦点的input  
       var inputElem = document.querySelector('input');  
              inputElem.focus();   
    }, 200);  
};  
mui.plusReady(function() {  
    initNativeObjects();  
    showSoftInput();  
});

补充更新:

调用plus.webview.create()创建新的webview,会导致当前webview失去焦点,因此可能出现键盘闪一下又消失的情况。

解决方案:将创建webview的代码放到显示键盘之前(initNativeObjects方法之前)。

另外,为了强制当前webview获得焦点,可像如下方式修改showSoftInput方法:

var showSoftInput = function() {  
    var nativeWebview = plus.webview.currentWebview().nativeInstanceObject();  
    if (mui.os.android) {  
        //强制当前webview获得焦点  
        plus.android.importClass(nativeWebview);  
        nativeWebview.requestFocus();  
        imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);  
    } else {  
        nativeWebview.plusCallMethod({  
            "setKeyboardDisplayRequiresUserAction": false  
        });  
    }  
    setTimeout(function() {  
       //此处可写具体逻辑设置获取焦点的input  
       var inputElem = document.querySelector('input');  
              inputElem.focus();   
    }, 200);  
};
20 关注 分享
蔡繁荣 k_liu yank90 safaring 小岳岳 MooGu 陌上花 Trust 6***@qq.com 仙人指路 大毕 9***@qq.com 赵 田云 8***@qq.com 最光阴 miskss Yizhiyu ___K 2***@qq.com

要回复文章请先登录注册

2***@qq.com

2***@qq.com

安卓软键盘打开 延迟比较严重啊 请问有什么能解决这个问题的方法吗 感谢啊@五块钱的果汁
2017-07-10 16:29
2***@qq.com

2***@qq.com

安卓软键盘打开 延迟比较严重啊 请问有什么能解决这个问题的方法吗 感谢啊
2017-07-06 15:23
小和尚ABC

小和尚ABC

回复 1***@163.com :
我的ios无效,8版本的
2017-06-28 17:26
小和尚ABC

小和尚ABC

安卓软键盘打开大约有3s的延迟。请问能解决吗?setTimeOut的时间修改为100,其实效果微乎其微。
2017-06-28 16:45
小和尚ABC

小和尚ABC

回复 1***@qq.com :
我的也是有延迟,settimeout也修改了,还是延迟,请问你解决了吗?
2017-06-28 16:41
liyoungs

liyoungs

回复 jamzhang :
解决了吗?
2017-06-15 14:44
6***@qq.com

6***@qq.com

功能能正常使用,但是弹出来的搜索框光标下移。。。
2017-05-06 18:04
Sinea

Sinea

回复 2***@qq.com :
input type='tel'
2017-05-05 14:41
2***@qq.com

2***@qq.com

怎么是打开的键盘数字键盘
2017-04-14 09:55
MLxing

MLxing

自己写的客户端,嵌入h5页面,安卓版input不会自动聚焦,要怎么解决
2017-04-12 10:15