Android与WebView 交互 获取H5网页标签内容

在与H5交互中,通常会有类似的需求,获取H5页面中的某个标签的值:

标题


 

webView中有时需要获得这个描述用于分享等行为。
然而,这个描述无法像title一样通过getTitle()这样的方法简单获得。
所以,我们需要jsoup这个强大的工具。

1.在gradle里添加:

 implementation 'org.jsoup:jsoup:1.13.1'

2.注入Js

mWeb.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");

3.创建交互类InJavaScriptLocalObj

public class InJavaScriptLocalObj {
    final String TAG = getClass().getSimpleName();

    String shareurl;
    String shareicon;
    String description;

    public String getShareurl() {
        return shareurl;
    }

    public String getShareicon() {
        return shareicon;
    }

    public String getDescription() {
        return description;
    }

    @JavascriptInterface
    public void showSource(String html) {
        getHtmlContent(html);
    }

    /**
     * 获取内容
     *
     * @param html
     */
    private void getHtmlContent(final String html) {
        Log.d(TAG, "网页内容:" + html);
        Document document = Jsoup.parse(html);
        shareurl = document.select("meta[name=shareurl]").get(0).attr("content");
        shareicon = document.select("meta[name=shareicon]").get(0).attr("content");
        description = document.select("meta[name=description]").get(0).attr("content");
        Log.d(TAG, "shareurl:" + shareurl);
        Log.d(TAG, "shareicon:" + shareicon);
        Log.d(TAG, "description:" + description);
    }
}

4.在onPageFinished监听中添加

view.loadUrl("javascript:window.local_obj.showSource(''+" + "document.getElementsByTagName('html')[0].innerHTML+'');");

遍历网页内图片的方法:

public static List getImgs(Document doc)
    {
        List imgs=new ArrayList<>();
        Elements links = doc.select("img[src]");

        for (Element element : links) {
            String url=element.attr("src");
            imgs.add(url);
        }
        return imgs;
    }

添加H5页面图片监听:

// 注入js函数监听
    private void addImageClickListner() {
        // 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,函数的功能是在图片点击的时候调用本地java接口并传递url过去
        webView.loadUrl("javascript:(function(){" +
                "var objs = document.getElementsByTagName(\"img\"); " +
                "for(var i=0;i

你可能感兴趣的:(WebView交互)