2012-08-01 16 views
15

sto caricando questo html a mio avviso webdati che passano dalla classe Java per Web View html

https://mail-attachment.googleusercontent.com/attachment/?ui=2&ik=25c0c425c6&view=att&th=138db54ff27ad34b&attid=0.1&disp=inline&realattid=f_h5ahtmbe0&safe=1&zw&saduie=AG9B_P9YNooGjsk_jLefLptQ9q15&sadet=1343790299575&sads=-yBVsLKP_2mh7zMfYLCF7sL1u-w

ora quello che voglio fare è quello di riempire la casella di testo nel codice HTML che è venuto dal mio java class variabile e quindi premere automaticamente invio.

Ma non ho idea di come farlo.

Qualsiasi punto sarà apprezzato.

risposta

37

In primo luogo, l'URL non sembra disponibile.

Se si desidera eseguire lo scambio di dati tra l'app Android e la propria app Web/pagina Web, è possibile farlo tramite javascript.

Ecco un esempio da Android sito ufficiale:

creare una classe come questa:

public class JavaScriptInterface { 
    Context mContext; 

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

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

Nel vostro WebView:

WebView webView = (WebView) findViewById(R.id.webview); 
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 

Nella pagina web:

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

<script type="text/javascript"> 
    function showAndroidToast(toast) { 
     Android.showToast(toast); 
    } 
</script> 

se vuoi passare qualcosa alla tua pagina web, semplicemente chiamando corrispondente funzione javascript:

String str = "xxx"; 
myWebView.loadUrl("javascript:xxx('"+str+"')"); 

Ecco il riferimento: http://developer.android.com/guide/webapps/webview.html

+1

cosa intendi con questo myWebView.loadUrl ("javascript: xxx ('xxx')"); Sto anche usando url di caricamento per caricare il mio html, quindi è ok usare url di caricamento per più volte? – User

+1

sì fintanto che la funzione javascript esiste nella tua pagina web – hungr

+1

vedo che è perché caricherò il javascript perché ha il codice per passare alcuni dati. – User

14

Aggiungo che il carico della funzione JavaScript dovrebbe essere fatto quando il codice HTML è caricato Per controllare questo, si può utilizzare il seguente:

webview.getSettings().setJavaScriptEnabled(true); 
webview.loadUrl("file:///android_asset/test.html"); 
webview.setWebViewClient(new WebViewClient(){ 
    public void onPageFinished(WebView view, String url){ 
     webview.loadUrl("javascript:init('" + theArgumentYouWantToPass + "')"); 
    }   
}); 

test.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>Test</title> 
</head> 

<body> 
hola 
adios 
</body> 

<script type="text/javascript"> 

    function init(val){ 
// Do whatever you want with your parameter val 
    } 
</script> 
</html> 

Tratto da Uncaught ReferenceError: myFunction is not defined at null:1 Android exception in webview

+0

molto molto bello .... onPageFinished è un punto importante che ho dimenticato di usare ... –

+0

Dove posso aggiungere la cartella android_asset –

0

Basta attivare DomStorage e scrivere "var x =" a stringa:

webview.getSettings().setJavaScriptEnabled(true); 
web.getSettings().setDomStorageEnabled(true); 

webview.loadUrl(urlString); 
webview.setWebViewClient(new WebViewClient(){ 

public void onPageFinished(WebView view, String url){ 
    super.onPageFinished(view, url); 
    String js = "javascript:var x =document.getElementById('username').value = '"+user+"';var y=document.getElementById('password').value='"+pass+"';"; 

    if (Build.VERSION.SDK_INT >= 19) { 
      view.evaluateJavascript(js, new ValueCallback<String>() { 
       @Override 
       public void onReceiveValue(String s) { 

       } 
      }); 
     } else { 
      view.loadUrl(js); 
     } 

    view.loadUrl(js); 
} 


}); 
Problemi correlati