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

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

文本字段不会丢失焦点,所以提示仍然在文本字段上,但软键盘已closures。

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

Solutions Collecting From Web of "在Android的webview,当我执行javascript sotfkeyboard消失"

最简单的方法是将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): } } 

然后使用javascriptInterface:

 private class JsInterface { @JavascriptInterface public String getJavascript(){ synchronized(LOCK) { String javascriptToRun = sb.toString(); sb = new StringBuilder(); sb.append("javascript:"); return javascriptToRun; } } } 

将你的javascript界面​​添加到你的webview中:

 JsInterface jsInterface = new JavascriptInterface(); webview.addJavascriptInterface(jsInterface, "JsInterface"); 

并在您的JavaScript代码设置检索存储函数的定时间隔。

编辑

我刚刚find这个答案 ,这说明我的问题很严重,方法不同步。 意思是当你调用getJavascript()我们的variablessb可能还没有准备好被读取。 我已经将相关位添加到上面的源代码中。

使用locking或您的代码将是不可靠的

这是一个预期的行为:通过调用WebView.loadUrl()你基本上重新加载页面,因此软键盘被解雇。

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