I've got WebView, JS code inside it. Also I have interface to allow Java method invocation from WebView to Java code. I need to pass data from JS to Java. To do so:
webView.loadUrl("javascript:getData()");
//Obtain Java object here
In JavaScript:
function gataData () {
//serialize data to JSON, pass it as 'native' function param
JSInterface.setLocationsData(data);// This calls a Java function setLocationsData(String param)
}
In JavaScript interface(Java code):
void setLocationsData(String param){
//parse JSON here, create Java Object
}
The problem is: I've got a delay between calling script in WebView after webView.loadUrl() and moment when data is returned to my Java code. Java code doesn't wait for JS to finish it's business. How do I solve this?
解决方案
The only (hacky) solution that I've come across is using a one second delay after calling the loadUrl. You may use the addJavaSriptInterface() to do so.
or if the JS processing takes too long you have to use callbacks
function callYourCallbackFunctionHere(toast) {
Android.callAndroidCallback(toast);
}
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();
}
}