如何获取在webview中显示的html页面的整个内容文本

Posted

技术标签:

【中文标题】如何获取在webview中显示的html页面的整个内容文本【英文标题】:How to get the whole content text of html page displayed in webview 【发布时间】:2014-09-04 06:32:27 【问题描述】:

我发现了从 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));
            

我没有看到我的任何日志。如何在String 中获取HTML 页面的内容(文本)。我在做什么错?提前致谢

【问题讨论】:

看到这个帖子***.com/questions/8200945/… 来自网络或本地文件? @NickF from web 我已经在 webview 中显示了我需要获取的文件 你想在网页视图中显示 html 字符串吗? @Suru 不,我需要在 webview 中显示的 html 页面中的文本 【参考方案1】:

我通过这种方式得到了内容

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

                
            );
        
    

【讨论】:

【参考方案2】:

您是否尝试向该页面发起 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();
    

【讨论】:

无法理解您的代码.. 我需要从该 webview 获取文本 它是一个使用 AsyncTask 获取 URL 的请求。它以字符串形式返回 HTML 页面(返回 responseString)。您可以使用 webview url 并启动此任务以将其内容检索为字符串。 显示类型不匹配:无法从 AsyncTask 转换为 String 它不起作用..我也没有收到任何错误,但应用程序已最小化 @MakeitSimple LOG 中什么都没有,应用程序强制关闭?

以上是关于如何获取在webview中显示的html页面的整个内容文本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用动态 URL 从 webview 获取 JSON?

如何获取在 UIWebView 中显示的 HTML 页面的标题?

react-native 页面使用WebView布满整个页面,导航栏不显示问题

react-native 页面使用WebView布满整个页面,导航栏不显示问题

WebView仿原生app页面切换效果

从加载的 WebView 中获取 HTML 代码 [重复]