2011-10-23 20 views
0

WebView、JSコードが入っています。また、WebViewからJavaコードへのJavaメソッドの呼び出しを許可するためのインタフェースもあります。 JSからJavaにデータを渡す必要があります。です:JavaScriptで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) 
} 

(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

関連する問題