在与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