Luc*_*cio 7 javascript android focus webview android-softkeyboard
在WebView中,当我通过webview.loadUrl()执行JavaScript时,软键盘会在可见时消失.当我尝试在html文本字段中键入一些文本时,软键盘会消失(如果执行了JavaScript),我无法输入所有文本.
文本字段不会失去焦点,因此提示仍在文本字段中,但软键盘会关闭.
有人能告诉我如何解决这个问题?
最简单的方法是将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可能尚未准备好进行读取.我已将相关位添加到上面的源代码中.
使用锁定或您的代码将不可靠
这是预期的行为:通过调用,WebView.loadUrl()您基本上会重新加载页面,因此软键盘将被关闭。
或者,您可以尝试确定软键盘是否显示并延迟 JS 执行,直到其隐藏。有关检查软键盘状态的一般方法,请参阅如何检查 Android 中软件键盘的可见性?
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |