Android Webview EvaluateJavascript有时不返回响应
我已经尝试修复这个问题好几个星期了,但不知道是什么导致了这个问题。在我的项目中,我使用Android Webview的Android Webview EvaluateJavascript有时不返回响应,java,android,callback,android-webview,android-webview-javascript,Java,Android,Callback,Android Webview,Android Webview Javascript,我已经尝试修复这个问题好几个星期了,但不知道是什么导致了这个问题。在我的项目中,我使用Android Webview的evaluateJavascript()方法,如下所示: this.runOnUiThread(new Runnable() { @Override public void run() { webView.evaluateJavascript(command, new ValueCallback<String&
evaluateJavascript()
方法,如下所示:
this.runOnUiThread(new Runnable() {
@Override
public void run() {
webView.evaluateJavascript(command, new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//Parsing and taking action here
Log.d("Response", value);
}
});
}
});
或
虽然10次调用中有9次会在onReceiveValue()
方法中返回一个值,但偶尔我根本不会收到响应
这种缺乏回应的情况使得连锁事件成为一场噩梦,我不知道为什么会发生这种情况
提供更多数据以避免任何其他问题:
- 这个项目的最低SDK是21,我的目标是28
- 此时此刻,我不打算使用任何
s,出于一些与业务相关的原因,我不打算为这个项目提供任何帮助李>javascriptInterface
- 当我在
方法中收到webview的响应时,它通常是我刚刚设置的值,如果是单击事件,则为“null”。不管怎样,问题不是我有时会收到空值或其他值,而是有时明显缺乏响应李>onReceiveValue()
- 如代码示例所示,我肯定会按照文档在UI线程上运行它李>
- 每当我按下按钮时,服务器开发人员就会在控制台日志中添加一些代码,当我在
方法中成功返回值时,控制台日志会工作并响应,但当我处于无法返回响应的情况下,web控制台日志从未触发,也从未检测到与按钮的交互onReceiveValue()
- 我还尝试添加一个带有逻辑的计时器,用于侦听来自webview的响应,如果它没有收到响应,则尝试再次进行相同的调用,最高可达10倍。当第一次调用失败时,后续的任何尝试都不起作用
- 以下是my webview的设置:
我的总结问题是,是什么导致Android WebView的
evaluateJavascript()
调用在onReceiveValue()
方法中不触发回调也不返回值?我最终弄清楚了这里发生了什么
较短的版本是,如果内存泄漏,并且使用半破坏webview的对象将触发命令,但新初始化的webview将不会收到响应,因为它将发送给死掉的侦听器,则可能会发生这种情况
如果要防止这种情况发生,只需确保维护
应用程序上下文的所有对象都已正确处置,或者在活动重新启动时正确重置,否则所有对象都使用相同的应用程序级上下文,但完全使用新视图和回调 发生在我身上,因为我试图从后台线程调用webView.evaluateJavascript(…)
我通过以下方式解决了此问题:
document.getElementById("message").value="Stuff worked!";
document.getElementById("some-awesome-button").click();
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.post(() -> webView.evaluateJavascript(...));