本文旨在:通过点击一张图片Toast输出位置与url链接。

闲话少说,实现原理大概是酱紫的::通过正则表达式检测富文本内的图片集合并获取url,在src=“xxx” 后面添加 onclick方法,至于js如何load进去本人是自己拼接了一个html标签的上下文

js调用java方法请自行搜索不在本文讨论范围。

public class HtmlUtils {

    /**
* 获取html中的所有图片
* @param compatText
* @return
*/
public static List<String> filterImages(String compatText){
List<String> uList = new ArrayList<>();
if(!TextUtils.isEmpty(compatText)&&compatText.contains("<img")){
//get img src
Pattern p = Pattern.compile("<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>");//<img[^<>]*src=[\'\"]([0-9A-Za-z.\\/]*)[\'\"].(.*?)>");
Matcher m = p.matcher(compatText);
String searchAttrib = "src";
String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']http://([^\"|']+)[\"|']";//"=[\"|']([^[\"|']]+)[\"|']";
Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
while(m.find()){
Matcher matcherForAttrib = patternForAttrib.matcher(m.group());
if (matcherForAttrib.find()) {
System.out.println("poe " +"http://" +matcherForAttrib.group());
uList.add("http://" +matcherForAttrib.group());
}
}
}
return uList;
} /**
* 1.向富文本中插入执行函数sayHello
* 2.修改后的文本插入<html></html> 组合为新的页面 .
* @param compatText
*/
public static String constructExecActionJs(String compatText){
StringBuffer sb = new StringBuffer();
sb.append("<html> " +
"<script type=\"text/javascript\"> " +
" function showImage(position , url) {\n" +
" window.control.showImage(position,url)\n" +
" }"+
"</script>");
//插入函数
sb.append(insertExecActionJs(compatText));
sb.append("</html>");
return sb.toString();
} public static String insertExecActionJs(String compatText){
String searchAttrib = "src";
String regxpForTag ="<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>";
Pattern patternForTag = Pattern.compile(regxpForTag);
String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']http://([^\"|']+)[\"|']";//"=[\"|']([^[\"|']]+)[\"|']";
Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
Matcher matcherForTag = patternForTag.matcher(compatText);
StringBuffer sb = new StringBuffer();
boolean result = matcherForTag.find();
int pos = ;
while (result) {
StringBuffer sbreplace = new StringBuffer();
System.out.println(matcherForTag.group());
Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag.group()); if (matcherForAttrib.find()) {
System.out.println("ll"+matcherForAttrib.group());
matcherForAttrib.appendReplacement(sbreplace, searchAttrib+"=\"http://"
+ matcherForAttrib.group() +"\""+ " onclick=\"showImage(" +
+pos+"," +
"'http://" +matcherForAttrib.group() +"'"
+")\"");
}
matcherForAttrib.appendTail(sbreplace);
matcherForTag.appendReplacement(sb, sbreplace.toString());
result = matcherForTag.find();
pos++;
}
matcherForTag.appendTail(sb);
System.out.println("poe: "+sb.toString());
return sb.toString();
}
}

Activity中代码如下:

mWebView.getSettings().setDefaultTextEncodingName("utf-8");
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JsInteration(),"control");

  

public class JsInteration {
@JavascriptInterface
public void showImage(int position ,String url) {
Toast.makeText(getApplicationContext(), position+":"+url, Toast.LENGTH_LONG).show();
}
}

调用:

WebViewUtils.setContentToWebView(mWebView,HtmlUtils.constructExecActionJs(blogDetail.getBlogContent()));

Android检测富文本中的<img标签并实现点击效果的更多相关文章

  1. 去除富文本中的html标签及vue、react、微信小程序中的过滤器

    在获取富文本后,又只要显示部分内容,需要去除富文本标签,然后再截取其中一部分内容:然后就是过滤器,在微信小程序中使用还是挺多次的,在vue及react中也遇到过 1.富文本去除html标签 去除htm ...

  2. 从html富文本中提取纯文本

    其实从html富文本中提取纯文本很简单,富文本基本上是使用html标签给文本加上丰富多彩的样式. 所以只需要将富文本字符串中的“<.....>”标签剔除,即可得到纯文本.我们可以使用正则表 ...

  3. Android WebView的HTML中的select标签不起作用

    Android WebView的HTML中的select标签不起作用 经过查询资料,了解到android对html里的select标签是弹出一个原生的选择器. 问题: Webview中的select没 ...

  4. 清除文本中Html的标签

    /// <summary> /// 清除文本中Html的标签 /// </summary> /// <param name="Content"> ...

  5. C# 清除文本中的HTML标签

    /// <summary>          /// 清除文本中Html的标签          /// </summary>          /// <param n ...

  6. 微信小程序富文本中的图片大小超出屏幕

    这个问题我在小程序社区中提的,后来有个帮我回答了这个问题,我试了一下可以. 解决办法是过滤富文本内容,给图片标签添加一个样式,限制图片的最大宽度. replace(/\<img/gi,   '& ...

  7. vue修改富文本中的元素样式

    富文本编辑器目前应用很广泛,而有时候我们想要对其中的一些元素的样式进行修改,就会遇到问题. 首先,直接修改是不可行的,因为是用v-html标签进行渲染的,无法直接获取到. 在修改的时候,一般是按标签进 ...

  8. python去除文本中的HTML标签

    def SplitHtmlTag(file): with open(file,"r") as f,open("result.txt","w+" ...

  9. selenium自动化测试在富文本中输入信息的方法

    第一次用selenium+python编写自动测试脚本,因为页面中插入了富文本编辑,开始怎么都无法输入进去,度娘好多方法都无效,分享踩坑的经历一是为了记录一下自己的成长,二是为了给同样摸索seleni ...

随机推荐

  1. 【JavaScript】jsp表格页面记录

    页面效果如下: jsp代码如下(里面引入了很多其他js文件,很多方法调用来自其他js): <%@ page language="java" contentType=" ...

  2. Shell脚本修改Nginx upstream配置文件

    #!/bin/bash ##################################################### # Name: change_nginx_upstream_conf ...

  3. Codeforces 17.E Palisection

    E. Palisection time limit per test 2 seconds memory limit per test 128 megabytes input standard inpu ...

  4. 折腾到死:matlab7.0 安装

    matlab7.0应该是2004年的东西了吧,装起来相当费劲!为什么不用更高的版本呢?其实我也想,之前安装的2013a安装包就5个多G,安装完之后就十多个G了.我习惯将软件安装到C盘,可怜我那100G ...

  5. IO多路复用之epoll(一)讲解

    网络通信中socket有自己的内核发送缓冲区和内核接受缓冲区,好比是一个水池, 当用户发送数据的时候会从用户缓冲区拷贝到socket的内核发送缓冲区,然后从 socket发送缓冲区发出去, 当用户要读 ...

  6. 前端PHP入门-023-重点日期函数之程序执行时间检测

    我们有的时经常需要做程序的执行时间执行效率判断. 实现的思路如下: <?php //记录开始时间 //记录结整时 // 开始时间 减去(-) 结束时间 得到程序的运行时间 ?> 可是大家不 ...

  7. ZOJ 3777 B - Problem Arrangement 状压DP

    LINK:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 题意:有N(\( N <= 12 \))道题,排顺序 ...

  8. Python学习笔记(二十五)操作文件和目录

    摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319253241 ...

  9. StringUtils.htmlEncode()--html标签过滤方法实现

    package org.guyezhai.utils; import java.text.CharacterIterator; import java.text.StringCharacterIter ...

  10. React Native 入门笔记一 -- Windows下基本环境配置

    一.准备工作 首先,需要安装nodejs,可以从nodejs官网下载,注意,React Native 要求node版本在4.0或以上:否则会出错,我建议把node版本升到最新版本,防止后面出现各种莫名 ...