gpt4 book ai didi

java - 如何在 Android WebView 中使 JavaScript-Java 通信同步?

转载 作者:行者123 更新时间:2023-12-02 08:07:51 25 4
gpt4 key购买 nike

我里面有WebView,JS代码。我还拥有允许从 WebView 到 Java 代码调用 Java 方法的接口(interface)。 我需要将数据从 JS 传递到 Java。为此:

webView.loadUrl("javascript:getData()");

//Obtain Java object here

在 JavaScript 中:

function gataData () {
//serialize data to JSON, pass it as 'native' function param
JSInterface.setLocationsData(data);// This calls a Java function setLocationsData(String param)
}

在 JavaScript 界面(Java 代码)中:

 void setLocationsData(String param){
//parse JSON here, create Java Object
}

问题是:在 webView.loadUrl() 之后调用 WebView 中的脚本与数据返回到我的 Java 代码之间存在延迟。 Java 代码不会等待 JS 完成它的工作。我该如何解决这个问题?

最佳答案

我遇到的唯一(hacky)解决方案是使用 one second delay调用 loadUrl 后。您可以使用addJavaSriptInterface()这样做。

或者如果 JS 处理时间太长,则必须使用回调

<input type="button" value="Say hello" onClick="callYourCallbackFunctionHere('Hello Android!')" />

<script type="text/javascript">
function callYourCallbackFunctionHere(toast) {
Android.callAndroidCallback(toast);
}
</script>
<小时/>
public class JavaScriptInterface {
Context mContext;

/** Instantiate the interface and set the context */
JavaScriptInterface(Context c) {
mContext = c;
}

/** Show a toast from the web page */
public void callAndroidCallback(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}

关于java - 如何在 Android WebView 中使 JavaScript-Java 通信同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7869372/

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