返回

WebView与JavaScript交互之获取HTML内容

Android

前言

在Android开发中,WebView是实现网页浏览功能的常用控件。WebView允许开发者在应用程序中嵌入网页,并提供与JavaScript交互的机制。获取HTML内容是WebView与JavaScript交互的常见任务之一,本文将介绍如何使用WebView从网页中获取HTML内容。

获取HTML内容的方法

有两种主要的方法可以从WebView中获取HTML内容:

  1. 使用WebView的evaluateJavascript()方法:evaluateJavascript()方法允许开发者在WebView中执行JavaScript代码,并返回执行结果。通过evaluateJavascript()方法,开发者可以执行JavaScript代码来获取HTML内容。
  2. 使用WebView的addJavascriptInterface()方法:addJavascriptInterface()方法允许开发者将一个Java对象暴露给JavaScript代码,以便JavaScript代码可以调用Java对象的方法。通过addJavascriptInterface()方法,开发者可以将一个Java对象暴露给JavaScript代码,并在Java对象中提供获取HTML内容的方法。

使用evaluateJavascript()方法获取HTML内容

使用evaluateJavascript()方法获取HTML内容的步骤如下:

  1. 在WebView中加载需要获取HTML内容的网页。

  2. 调用WebView的evaluateJavascript()方法,并传入以下参数:

    • 要执行的JavaScript代码:JavaScript代码用于获取HTML内容。
    • 一个ValueCallback对象:ValueCallback对象用于接收执行结果。
  3. 在ValueCallback对象中处理执行结果:

    • 如果执行成功,则会收到执行结果。
    • 如果执行失败,则会收到一个错误信息。

以下是一个使用evaluateJavascript()方法获取HTML内容的示例代码:

WebView webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("https://www.example.com");
webView.evaluateJavascript("document.documentElement.innerHTML", new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String html) {
        // 处理HTML内容
    }
});

使用addJavascriptInterface()方法获取HTML内容

使用addJavascriptInterface()方法获取HTML内容的步骤如下:

  1. 创建一个Java对象,并在Java对象中提供获取HTML内容的方法。

  2. 调用WebView的addJavascriptInterface()方法,并传入以下参数:

    • Java对象:要暴露给JavaScript代码的Java对象。
    • 接口名称:JavaScript代码中使用的接口名称。
  3. 在JavaScript代码中调用Java对象的方法来获取HTML内容。

以下是一个使用addJavascriptInterface()方法获取HTML内容的示例代码:

class MyJavaScriptInterface {
    public String getHtml() {
        return document.documentElement.innerHTML;
    }
}

WebView webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("https://www.example.com");
webView.addJavascriptInterface(new MyJavaScriptInterface(), "MyJavaScriptInterface");

在JavaScript代码中,可以使用以下代码来调用Java对象的方法获取HTML内容:

MyJavaScriptInterface.getHtml();

结语

本文介绍了两种从WebView中获取HTML内容的方法:evaluateJavascript()方法和addJavascriptInterface()方法。开发者可以根据自己的需求选择合适的方法来获取HTML内容。