【问题标题】:Check and insert alt attribute for images which miss it检查并插入缺少它的图像的 alt 属性
【发布时间】:2013-11-04 02:13:07
【问题描述】:

我想编写一个 Java 工具来评估现有网站的 HTML 页面,如果任何图像没有 alt 属性,该工具将在该图像中插入 alt=""。一种方法是使用 HTML 解析器(如 HtmlCleaner)生成 DOM,然后在写回 HTML 之前将 alt 属性添加到 DOM 中的图像。

但是,这种方法不会保持原始 HTML 的完整性,并且可能会导致一些不可预知的副作用,尤其是。当现有的 HTML 页面数量巨大且无法保证它们的格式正确时。

有没有更安全的方法来实现这一点(即应该保持原始 HTML 不变并且只添加 alt 属性)?

【问题讨论】:

    标签: java html


    【解决方案1】:

    除了编写一些可怕的正则表达式或其他字符串操作代码之外,我不相信还有其他方法可以做到这一点。

    我确实质疑为什么你想这样做?我能想象的唯一原因是通过某种自动验证,但需要 alt 标签的原因是可用性问题。添加空的 alt 标签并没有任何帮助。你只是在隐藏问题。

    相反,我建议编写一些 Javascript,在任何缺少 alt 标签的图像周围抛出一个红色边框,并让前端设计人员为每个标记的图像添加 有意义的 alt 标签。 p>

    【讨论】:

    • 符合第 508 节的规则之一要求装饰性图像需要有一个空的 alt 标签(以帮助阅读器工具区分缺少 alt 的图像和装饰性图像)
    • 但是您的建议是识别所有缺少替代文本的图像并将它们标记为装饰性的。如果内容作者正在制作没有 alt 文本的图像,并且已经接受过足够的培训,可以在非装饰性图像上包含 alt 文本,那么进一步训练他们为装饰性图像添加空 alt 属性(而不是标签)应该不难。您不应该相信缺少 alt 属性是因为图像是装饰性的,而不是人为错误或无知。
    • 好点;我绝对不认为缺少 alt 自动意味着装饰图像。导致我考虑这种方法的原因是该站点已经存在并且需要修复,并且人类或机器需要为装饰图像添加空的 alt 属性。无论哪种方式,人们无论如何都必须为所有非装饰性图像添加内容描述,但至少该工具可以帮助他们完成其他任务。
    • 最终只有人类才能添加有意义的 alt 标签(即使有意义的意思是空标签来表示装饰元素)。此处的任何程序化“修复”都有“隐藏”问题的风险。除了无法验证之外,缺少 alt 标签不会导致问题或降低可用性。最好将它们排除在外,直到它们可以被人修复,而不是在没有任何人为监督的情况下自动注入它们。只是我的 0.02 美元。此外,如果您足够关心验证,那么您必须希望它验证,因为它实际上是正确的,而不仅仅是技术上的正确!
    • 感谢您的意见。但是上下文是该站点在那里并且在构建时并未考虑到合规性,因此我们必须查看每一个丢失或具有空alt属性的图像。在审核过程中,我们将为非装饰性图像添加描述。在该过程之后,我们可以运行完成其余工作的工具,即为其他人添加 alt 属性(现在,这些是装饰图像)。我认为这并不比人工操作更容易出错,同时考虑到网站中的页面数量,效率更高。
    【解决方案2】:

    在布局中添加空的 alt 标签是没有意义的。我对 Kris 表示赞同,因为它首先破坏了使用 alt 标签的目的,我同意 David Dorward 的评论。

    但是,如果这里有一些不可告人的动机,您可以事后在浏览器中使用 javascript(或者,最好是 jQuery)来执行此操作。客户端的浏览器当然无法更改原始 HTML,并且即使它的格式不完全正确,也足够聪明地解析它。

    使用 jQuery,将此脚本放在页面的头部:

    <script language="javscript">
    $(function() {
        $('img:not([alt])').attr('alt','');
    });
    </script>
    

    并确保包含 jQuery 库。

    【讨论】:

    • 有趣。但是,在我的情况下,alt 应该可以帮助文本阅读器;我想并不是所有的读者都能真正通过 JavaScript “阅读”动态修改的 DOM。因此,我正在寻找的解决方案是静态修改 HTML 源以添加 alt。
    【解决方案3】:

    我过去曾成功使用Jericho HTML Parser library 解析HTML。它应该适用于格式不佳的 HTML。不过,这会改变原来的 HTML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2016-05-06
      相关资源
      最近更新 更多