简体   繁体   English

如何从Android中的WebView提取字符串

[英]How to extract string from WebView in Android

I want to extract string from WebView, I used 我想从WebView中提取字符串

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. 但在我的processContent中,没有在Textview中传递的String。

Thanks in advance! 提前致谢!

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); 
    }
}

Put your function processContent in MyJavaScriptInterface class like 将函数processContent放在MyJavaScriptInterface类中,例如

@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);");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM