Android Webview EvaluateJavascript 有时没有return 响应

Android Webview EvaluateJavascript sometimes does not return a response

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

虽然 10 次中有 9 次这些调用 return onReceiveValue() 方法中的一个值,但偶尔我只是直接根本没有收到任何响应。

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

一些更多的数据来阻止任何其他问题:

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setAllowFileAccess(true);

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

我的总结性问题是,什么会导致 Android WebView 的 evaluateJavascript() 调用不触发回调,也不 return [=] 中的值17=]方法?

我终于弄清楚这里发生了什么。

更短的版本是,当您有内存泄漏并且使用半毁坏的 webview 的对象将触发命令时,可能会发生这种情况,但新初始化的 webview 不会收到响应,因为它正在运行一个死去的听众。

如果你想防止这种情况发生,只需确保维护 application Context 的所有对象都被正确处理或在 activity 重新启动时正确重置,否则你拥有所有对象使用相同的应用程序级上下文,但完全使用新的视图和回调。

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

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

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