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

使用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

要回复文章请先登录注册

1***@qq.com

1***@qq.com

可以用,但是不知道为什么第一次打开会出现延迟(2秒---3秒)。之后就没有延迟了。
2018-04-07 17:05
j***@163.com

j***@163.com

有demo吗?
2018-03-23 16:19
share丶p

share丶p

回复 7***@qq.com :
input type=number
2017-12-26 14:25
everyday666

everyday666

延迟
2017-11-15 17:50
2***@qq.com

2***@qq.com

ios使用WKWebview的内核下,怎么弄,有没有解决方法?
2017-11-13 17:29
2***@qq.com

2***@qq.com

ios使用WKWebview的内核下,这种方法好像是不行,有没有其他的解决方案。
2017-11-13 17:28
1***@qq.com

1***@qq.com

回复 小和尚ABC :
请问安卓键盘弹出的延迟问题解决了吗
2017-11-08 16:51
从入门到做保安

从入门到做保安

请问一下将创建webview的代码放到显示键盘之前(initNativeObjects方法之前) 怎么操作呢? 我是通过mui.openWindow打开的子页面 键盘始终要退一下再打开
2017-10-31 00:23
7***@qq.com

7***@qq.com

楼主,请问怎么默认打开为数字键盘?在线等,急!
2017-10-18 12:58
2***@qq.com

2***@qq.com

回复 BoredApe :
安卓软键盘打开 延迟比较严重啊 请问有什么能解决这个问题的方法吗 感谢啊
2017-07-10 16:29