how to get html content from a webview? how to get html content from a webview? android android

how to get html content from a webview?


Actually this question has many answers. Here are 2 of them :

  • This first is almost the same as yours, I guess we got it from the same tutorial.

public class TestActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.webview);        final WebView webview = (WebView) findViewById(R.id.browser);        webview.getSettings().setJavaScriptEnabled(true);        webview.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");        webview.setWebViewClient(new WebViewClient() {            @Override            public void onPageFinished(WebView view, String url) {                webview.loadUrl("javascript:window.HtmlViewer.showHTML" +                        "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");            }        });        webview.loadUrl("http://android-in-action.com/index.php?post/" +                "Common-errors-and-bugs-and-how-to-solve-avoid-them");    }    class MyJavaScriptInterface {        private Context ctx;        MyJavaScriptInterface(Context ctx) {            this.ctx = ctx;        }        public void showHTML(String html) {            new AlertDialog.Builder(ctx).setTitle("HTML").setMessage(html)                    .setPositiveButton(android.R.string.ok, null).setCancelable(false).create().show();        }    }}

This way your grab the html through javascript. Not the prettiest way but when you have your javascript interface, you can add other methods to tinker it.


  • An other way is using an HttpClient like there.

The option you choose also depends, I think, on what you intend to do with the retrieved html...


In KitKat and above, you could use evaluateJavascript method on webview

wvbrowser.evaluateJavascript(        "(function() { return ('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'); })();",         new ValueCallback<String>() {            @Override            public void onReceiveValue(String html) {                Log.d("HTML", html);                 // code here            }    });

See this answer for more examples


For android 4.2, dont forget to add @JavascriptInterface to all javascript functions