2012-12-28 14 views
5

Sto usando Android WebView per caricare una semplice pagina HTML. L'HTML dipende da un piccolo pezzo di codice Javascript.Inject JavaScript prima di html caricato con Android WebView

Devo inserire il Javascript prima che html sia caricato. Quindi lo faccio in questo modo:

public class MainActivity extends Activity { 

    WebView mWebView; 
    Button mButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mWebView = (WebView)findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.setWebChromeClient(new WebChromeClient(){ 
      @Override 
      public boolean onJsAlert(WebView view, String url, String message,JsResult result) { 
       return super.onJsAlert(view, url, message, result); 
      } 
     }); 


     mButton = (Button)findViewById(R.id.button); 
     mButton.setOnClickListener(new myListener()); 
    } 

    class myListener implements OnClickListener{ 

     int mCount = 1; 

     @Override 
     public void onClick(View arg0) { 
      System.out.println("Load test page=>"+mCount+" times"); 
      mWebView.loadUrl("javascript:var output='This string is defined before html loaded.'"); 
      mWebView.loadUrl("file:///android_asset/test.html"); 
      mCount++; 
     } 
    } 
} 

codice HTML:

<html> 

<head> 
<script> 
alert(output); 
</script> 
<head> 

<body> 
</body> 

</html> 

La JS e HTML funziona bene quando si fa clic sul pulsante prima volta. Ma quando faccio clic sul pulsante per eseguire nuovamente il caricamento, non è riuscito.

Logs:

Load test page=>1 times 
Load test page=>2 times 
Uncaught ReferenceError: output is not defined at file:///android_asset/test.html:5 
Load test page=>3 times 
Uncaught ReferenceError: output is not defined at file:///android_asset/test.html:5 

qualche suggerimento?

+0

Prova WebView.loadDataWithBaseURL() http://developer.android.com/reference/android/webkit/WebView.html#loadDataWithBaseURL(java.lang.String, java.lang.String, java.lang.String, java .lang.String, java.lang.String), esegue il rendering della variante in HTML (ad es. sostituzione di stringhe) quindi carica la stringa come pagina. – CodeColorist

risposta

0

Questo può sembrare un approccio prolisso, ma potresti avere il tuo codice Android scrivere il codice js in un file, quindi fare riferimento a quel file nel tuo file html?

Problemi correlati