var openSoftKeyboard = function() {
if(mui.os.ios) {
var webView = plus.webview.currentWebview().nativeInstanceObject();
webView.plusCallMethod({
"setKeyboardDisplayRequiresUserAction": false
});
} else {
var webview = plus.android.currentWebview();
plus.android.importClass(webview);
webview.requestFocus();
var Context = plus.android.importClass("android.content.Context");
var InputMethodManager = plus.android.importClass("android.view.inputmethod.InputMethodManager");
var main = plus.android.runtimeMainActivity();
var imm = main.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
}
}
1.
mui.plusReady(function() {
//頁面隱藏事件
plus.webview.currentWebview().addEventListener("hide",function(e){
document.getElementById("search").value="";
document.getElementById("search").blur();//搜索框取消焦點,關閉軟鍵盤
});
//頁面顯示事件
plus.webview.currentWebview().addEventListener("show",function(e){
setTimeout(function() {//自動打開軟鍵盤,搜索框獲取焦點
openSoftKeyboard();
document.getElementById("search").focus();
}, 600);
return false;
});
})
注意的bug: ajax 調用 、 createview 的創建 或者 銷毀、plus.nativeUI 的 showWaiting() closeWaiting() 等等,會引起當前頁面的聚焦問題,所以會導致blur()的觸發,而blur()會自動調用native 的 軟鍵盤關閉。
綜上所述,由於各種原因導致失去焦點,引起軟鍵盤閃退。
focus() 聚焦引起的軟鍵盤閃退問題: 做適當的延遲就行了
setTimeout(function() {
mobile.focus();
}, 300)
軟鍵盤的數字選項:(默認英文選項)
<input id="search" type="tel"/>
