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

使用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***@163.com

1***@163.com

ios无效,看着效果input框已经有获取焦点的效果,但是没有光标,软键盘也没有弹出,点击页面任意地方,可以出来正常效果
2016-07-09 19:00
3***@qq.com

3***@qq.com

用这个方法ios9.3.2打开新页面后不会自动焦点,也不会弹出键盘,需要在新页面随便点一个地方键盘才出来是为什么呢,安卓是正常的
2016-06-11 13:51
DCloud_UNI_CHB

DCloud_UNI_CHB

回复 i***@aliyun.com :
文章添加了”补充说明“,参考一下能否解决你的问题
2016-05-17 21:28
i***@aliyun.com

i***@aliyun.com

弹出来又缩进去了,这个是怎么解决的?
2016-04-28 09:28
nick01

nick01

聊天场景, 想让软键盘一直显示(点发送后会自动关闭),用延时调用showSoftInput 低版本安卓是没问题的,但在安卓5.0.1不起做用(第一次页面初始后调用是可以显示的),其它方法试了都不行。望DCloud_App_Array找找方法,谢谢
2016-02-28 15:21
yank90

yank90

问题找到方法了,在子界面调用父界面会有一些,问题。如无法设置焦点。
2016-01-31 01:03
yank90

yank90

回复 yank90 :
安卓系统 4.2.2
2016-01-31 00:14
yank90

yank90

目前还是有个问题,弹出缩进去已经解决。 但是弹出键盘后,焦点没有在输入框内,实在没有办法了。。。
2016-01-31 00:14
yank90

yank90

但是弹出来又缩进去了,把延时加到1000毫秒也没办法
2016-01-30 23:32
yank90

yank90

非常棒,正需要此功能!
2016-01-30 23:22