在Android webview上,当我执行javascript时,sotfkeyboard消失

Luc*_*cio 7 javascript android focus webview android-softkeyboard

在WebView中,当我通过webview.loadUrl()执行JavaScript时,软键盘会在可见时消失.当我尝试在html文本字段中键入一些文本时,软键盘会消失(如果执行了JavaScript),我无法输入所有文本.

文本字段不会失去焦点,因此提示仍在文本字段中,但软键盘会关闭.

有人能告诉我如何解决这个问题?

cai*_*ci2 5

最简单的方法是将javascript调用存储在插件或JavascriptInterface中,并在javascript端执行重复方法.这种方式loadUrl永远不会被称为.

就像是:

StringBuilder sb = null;
private final Object LOCK = new Object();
public void sendJavascript(String js){
  synchronized(LOCK) {
  if (sb == null){
     sb = new StringBuilder();
     sb.append("javascript:");
  }
   sb.append(js):    
  }  
}
Run Code Online (Sandbox Code Playgroud)

然后使用javascriptInterface:

private class JsInterface  {


@JavascriptInterface
    public String getJavascript(){
       synchronized(LOCK) {
        String javascriptToRun = sb.toString();
        sb = new StringBuilder();
        sb.append("javascript:");
        return javascriptToRun;
        }
      }
 }
Run Code Online (Sandbox Code Playgroud)

将您的javascript界面​​添加到您的webview:

JsInterface  jsInterface = new JavascriptInterface();
webview.addJavascriptInterface(jsInterface, "JsInterface");
Run Code Online (Sandbox Code Playgroud)

并在您的JavaScript代码上设置一个用于检索存储函数的定时间隔.

编辑

我刚刚发现这个答案,它表明我的问题很大,方法不同步.调用getJavascript()变量时的含义sb可能尚未准备好进行读取.我已将相关位添加到上面的源代码中.

使用锁定或您的代码将不可靠


ozb*_*bek 1

这是预期的行为:通过调用,WebView.loadUrl()您基本上会重新加载页面,因此软键盘将被关闭。

或者,您可以尝试确定软键盘是否显示并延迟 JS 执行,直到其隐藏。有关检查软键盘状态的一般方法,请参阅如何检查 Android 中软件键盘的可见性?