2011-10-23 28 views
0

我有WebView,裏面的JS代碼。此外,我有接口允許從WebView到Java代碼的Java方法調用。 我需要將數據從JS傳遞給Java。要做到這一點:如何在Android WebView中進行JavaScript-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完成它的業務。我該如何解決這個問題?

回答

2

我遇到的唯一(哈希)解決方案是在調用loadUrl之後使用one second delay。您可以使用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(); 
    } 
} 
+0

我已經有JSInterface,所以我需要一個回調,並以只有當程序進行中該回調被調用。感謝你的回答。 –

+0

這個解決方案有多強大?我們可以使用這些方法做完全的java <-> javascript通信還是有一些重要的限制?謝謝! – xus

相關問題