【问题标题】:TagHandler to handle Youtube tag <iframe>?TagHandler 处理 Youtube 标签 <iframe>?
【发布时间】:2017-02-21 22:59:24
【问题描述】:

我正在使用 Html.fromHtml() 解析 html。我的问题是我的 html 文本有 youtube 嵌入链接(基本上是 &lt;iframe&gt; 标签)

所以,由于Html 类不支持&lt;iframe&gt; 标签,我需要定义自己的TagHandler 来处理它。我要做的是将&lt;iframe&gt; 转换为常规的&lt;a&gt; 标记,以便它可以正确呈现。

//convert this
<iframe src="http://www.youtube.com/embed/xAEdMI2ZE88" frameborder="0" width="560" height="315"></iframe>
//To this
<a href="http://www.youtube.com/embed/xAEdMI2ZE88">Click to Watch</a>

我的问题是 我找不到从 &lt;iframe&gt; 标签获取 youtube 的 src 链接的方法。

这是我的 TagHandler 的 handleTag() 方法:

@Override
public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
    if (tag.equals("iframe")) {
        if(opening) {
            output.append("<a href=");
            //How to get YouTube video link and append it?
        }
        else {
            output.append("Click To Watch</a>");
        }
    }
}

提前致谢。

【问题讨论】:

  • 在传递给Html.fromHtml()之前为什么不在字符串中改变它?
  • 我从没想过。但是使用TagHandler 不可行吗?这不是它的工作吗?
  • 问题是TagHandler 的文档是……有限的,比如说。 :-) 我怀疑您需要的数据在 XMLReader 参数中,但由于他们没有说明那里会发生什么,因此依赖它有点冒险。
  • 我会和XMLReader一起玩。如果我遇到困难,我想我需要使用你的建议!

标签: android html


【解决方案1】:

你也可以使用这个正则表达式。

htmlString.replaceAll("<iframe\\s+.*?\\s+src=(\".*?\").*?<\\/iframe>", "<a href=$1>CLICK TO WATCH</a>");

【讨论】:

    【解决方案2】:

    目前,我接受了 CommonsWare 的建议并修改了字符串 before,将其传递给 Html.fromHtml

    //Opening tag
    Pattern p = Pattern.compile("<iframe src");
    Matcher m = p.matcher(htmlString);
    while (m.find())
        htmlString= m.replaceAll("<a href");
    
    //Closing tag    
    p = Pattern.compile("frameborder=.*</iframe>");
    m = p.matcher(htmlString);
    while (m.find())
        htmlString= m.replaceAll(">CLICK TO WATCH</a>");
    

    【讨论】:

    • 直到有人找到使用TagHandler 的方法,这将是公认的答案。
    • 在我的情况下不起作用,它只是显示正常的字符串
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2012-07-03
    • 2012-09-27
    • 2013-02-06
    • 2015-08-21
    • 1970-01-01
    相关资源
    最近更新 更多