如何从WebView检索HTML内容(作为字符串)

Joh*_*hnK 36 android webview android-webview

如何检索当前在WebView中显示的所有HTML内容?

我发现WebView.loadData()但我找不到相反的等价物(例如WebView.getData())

请注意,我感兴趣的检索的网页,我无法控制的数据(即我不能注入Javascript函数到这些网页,这样它会调用JavaScript接口的WebView).

shr*_*ari 33

您可以通过以下方式实现:

final Context myApp = this;

/* An instance of this class will be registered as a JavaScript interface */
class MyJavaScriptInterface
{
    @SuppressWarnings("unused")
    public void processHTML(String html)
    {
        // process the html as needed by the app
    }
}

final WebView browser = (WebView)findViewById(R.id.browser);
/* JavaScript must be enabled if you want it to work, obviously */
browser.getSettings().setJavaScriptEnabled(true);

/* Register a new JavaScript interface called HTMLOUT */
browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");

/* WebViewClient must be set BEFORE calling loadUrl! */
browser.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url)
    {
        /* This call inject JavaScript into the page which just finished loading. */
        browser.loadUrl("javascript:window.HTMLOUT.processHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
    }
});

/* load a web page */
browser.loadUrl("http://lexandera.com/files/jsexamples/gethtml.html");
Run Code Online (Sandbox Code Playgroud)

您将在processHTML方法中获得整个Html contnet.它不会再提出网页请求.所以这也是更有效的方式.

谢谢.

  • @shridutt kothari下次请相信您的来源.显而易见的是,你从Bernd S指出的链接中复制并粘贴了你的答案(这本身并不是一件坏事).在信用到期时给予信用,并允许OP为自己判断解决方案,这很好. . (6认同)
  • 看起来类似于http://lexandera.com/2009/01/extracting-html-from-a-webview/.该教程最后也有警告. (3认同)
  • 这也适用于帖子回复吗? (2认同)

bre*_*dan 17

不幸的是,这并不容易.

请参阅如何从WebView获取网页内容?

您可以将HttpRequest设置为与WebView相同的页面并获取响应.

  • 您可以进行一次调用,使用HttpRequest获取数据,然后使用WebView.LoadData将其推送到WebView (2认同)

noa*_*hen 12

webView.evaluateJavascript("(function(){return window.document.body.outerHTML})();", 
      new ValueCallback<String>() {
          @Override
          public void onReceiveValue(String html) {

          }
      });
Run Code Online (Sandbox Code Playgroud)


小智 0

你可以通过 JavaScriptInterface 从 webview 传递数据..我已经这样做了。将数据保存到静态变量,然后在android应用程序下处理