如何获取webview中显示的html页面的全部内容文本

问题描述 投票:0回答:2

我发现了从

webview
读取内容的问题。我已经尝试过但无法修复。

我已经在

webview
中显示了一个html页面。我需要
string

中该 html 页面的内容

java代码

WebView mainContent = (WebView)layout.findViewById(R.id.webView1);
         mainContent.getSettings().setJavaScriptEnabled(true);
         WebSettings webSettings = mainContent.getSettings();
         webSettings.setJavaScriptEnabled(true);
         webSettings.setBuiltInZoomControls(true);
         mainContent.requestFocusFromTouch();
          mainContent.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    mainContent.loadUrl("javascript:window.HTMLOUT.processHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
                }
            });
         mainContent.setWebChromeClient(new WebChromeClient());
         mainContent.loadUrl("file:///android_asset/"+filename.get(position));
         webSettings.setDefaultFontSize(40);

在我的活动中

public void processHTML(String html) {

                System.out.println("======++++"+Html.fromHtml(html));
            }

我没有看到我的任何日志。我如何获取

HTML
String
页面的内容(文本)。我做错了什么?预先感谢

android html webview
2个回答
3
投票

我是这样得到内容的

mainContent.getSettings().setJavaScriptEnabled(true);
WebSettings webSettings = mainContent.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(true);
mainContent.requestFocusFromTouch();
mainContent.setWebChromeClient(new WebChromeClient());
mainContent.loadUrl("file:///android_asset/"+filename.get(position));
mainContent.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        mainContent.setWebViewClient(null);    
        mainContent.loadUrl("javascript:window.HTMLOUT.processHTML('<div>'+document.getElementsByTagName('div')[0].innerHTML+'</div>');");

在我的活动中

class MyJavaScriptInterface {
    @SuppressWarnings("unused")
    public void processHTML(final String html) {
        runOnUiThread(new Runnable() {
            public void run() {
                Spanned page = Html.fromHtml(html);
                System.out.println("content"+page);
            }
        });
    }
}

1
投票

您是否尝试过向该页面发起 GET 请愿?

responseString
是字符串中的 HTML 页面。例如:

class RequestTask extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... uri) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response;
        String responseString = null;
        try {
            response = httpclient.execute(new HttpGet(uri[0]));
            StatusLine statusLine = response.getStatusLine();
            if(statusLine.getStatusCode() == HttpStatus.SC_OK){
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                response.getEntity().writeTo(out);
                out.close();
                responseString = out.toString();
            } else{
                //Closes the connection.
                response.getEntity().getContent().close();
                throw new IOException(statusLine.getReasonPhrase());
            }
        } catch (ClientProtocolException e) {
            //TODO Handle problems..
        } catch (IOException e) {
            //TODO Handle problems..
        }
        return responseString;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        //Do anything with response..
    }
}

启动 AsyncTask,例如:

try {
        String page = new RequestTask().execute("http://myurl.com").get();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ExecutionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
© www.soinside.com 2019 - 2024. All rights reserved.