Lester L.
Lester L.

Reputation: 969

How to extract string from WebView in Android

I want to extract string from WebView, I used

class MyJavaScriptInterface
{
private Context context;
private TextView textView;

public MyJavaScriptInterface(Context context, TextView textView) {
     this.context = context;
     this.textView = textView;
}
public void processContent(String aContent){
final String content = aContent;
textView.post(new Runnable(){

     @Override
     public void run() {
           textView.setText(content);
     }
 });
}
}
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyJavaScriptInterface(getActivity(), contentView), "INTERFACE");
            webView.setWebViewClient(new WebViewClient() {

                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    view.loadUrl("javascript:window.INTERFACE.processContent(document.getElementsByTagName('body')[0].innerText);");
                }
            });
webView.loadUrl(url);

but in my processContent there is no String that pass in the textview.

Thanks in advance!

Upvotes: 0

Views: 1327

Answers (2)

Chaman Saini
Chaman Saini

Reputation: 365

Put your function processContent in MyJavaScriptInterface class like

@JavascriptInterface
public void processContent(String aContent){
   final String content = aContent;
   textView.post(new Runnable(){
      @Override
      public void run() {
          textView.setText(content);
      }
    });
}

And change

view.loadUrl("javascript:window.INTERFACE.processContent(document.getElementsByTagName('body')[0].innerText);");

To

view.loadUrl("javascript:activity.processContent(document.getElementsByTagName('body')[0].innerText);");

Upvotes: 1

Bhavesh Rangani
Bhavesh Rangani

Reputation: 1510

may be this will work.

webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
webView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageFinished(WebView view, String url)
        {
            /* This call inject JavaScript into the page which just finished loading. */
            webView1.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
        }

    });

here is the class

class MyJavaScriptInterface
{
    @JavascriptInterface
    public void processHTML(String html)
    {
       //Html extract here
       System.out.println("my : " + html); 
    }
}

Upvotes: 2

Related Questions