如何在Android WebView中实现JavaScript-Java通信同步?

How do I make JavaScript-Java communication sync in Android WebView?

本文关键字:JavaScript-Java 通信 同步 实现 Android WebView      更新时间:2023-09-26

我有WebView, JS代码里面。我也有接口,允许Java方法调用从WebView到Java代码。我需要将数据从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()和数据返回到我的Java代码时,我在WebView中调用脚本之间有延迟。Java代码不会等待JS完成它的业务。怎么解呢?

我遇到的唯一(hacky)解决方案是在调用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();
    }
}