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?
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