gpt4 book ai didi

java - Android Webview EvaluateJavascript 有时不返回响应

转载 作者:行者123 更新时间:2023-12-02 01:34:34 53 4
gpt4 key购买 nike

我几周来一直在尝试解决这个问题,但不知道是什么导致了这个问题。在我的项目中,我使用 Android Webview 的 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);
}
});
}
});

我发送的 javascript 示例字符串是:

document.getElementById("message").value="Stuff worked!"; 

document.getElementById("some-awesome-button").click(); 

虽然这些调用十有八九会在 onReceiveValue() 方法中返回一个值,但偶尔我却根本没有收到任何响应。

缺乏响应使得链式事件成为一场噩梦,我不知道为什么会发生这种情况。

更多数据可以避免任何其他问题:

  • 此项目的最低 SDK 是 21,我的目标是 28。
  • 我目前没有使用任何javascriptInterface,并且由于一些与业务相关的原因,我也不打算在这个项目中使用任何javascriptInterface
  • 当我在 onReceiveValue() 方法中收到来自 webview 的响应时,它通常是我刚刚设置的值,如果是点击事件,则为“null”。不管怎样,问题不在于我有时会收到空值或其他值,而在于有时明显缺乏响应。
  • 如代码示例所示,我肯定按照文档在 UI 线程上运行它。
  • 每当我按下按钮时,我都会让服务器开发人员在控制台日志中添加一些代码,当我在 onReceiveValue() 方法中返回成功值时,控制台日志正在工作并响应,但是当我没有收到响应的情况下,Web 控制台日志永远不会触发,也永远不会检测到与按钮的交互。
  • 我还尝试添加一个带有逻辑的计时器,用于监听来自 webview 的响应,如果没有收到响应,则尝试再次进行相同的调用,最多可达 10 倍。当第一次调用失败时,后续尝试都不起作用。
  • 这些是我的 WebView 的设置:
    webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAllowFileAccess(true);

问题似乎出在 Javascript Bridge 上,但我不能确定。

我的总结问题是,什么可能导致 Android WebView 的 evaluateJavascript() 调用不触发回调,也不在 onReceiveValue() 中返回值> 方法?

最佳答案

发生在我身上是因为我试图从后台线程调用webView.evaluateJavascript(...)

我通过使用 View#post() 包装它来解决它:

webView.post(() -> webView.evaluateJavascript(...));

关于java - Android Webview EvaluateJavascript 有时不返回响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57528415/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com