问题描述
我有一个iframe,可以在其中投放任意内容。我想确保屏幕阅读器无法访问iframe中的内容,并指定选择iframe时应读取哪些屏幕阅读器。
我的期望是当在页面上的不同元素之间切换时,myDiv
被选择为一个单元,并且它读出UnkNown content
。
我尝试了以下
<div id="myDiv" title="UnkNown content">
<iframe id="myIframe" aria-hidden="true">
{arbitraryContent}
</html>
</div>
我遇到的问题是
- 并非所有iframe内容都会被忽略。也许是因为
aria-hidden
不能与可聚焦的子元素一起使用。 -
UnkNown text
并不总是被读取,尤其是在子元素可聚焦的情况下。 - 我还尝试在iframe上设置
tabIndex=-1
。但是,这将导致所有元素(包括myDiv
)都无法通过键盘选择。
什么是实现我所寻找的正确方法?
解决方法
如果您阻止屏幕阅读器读取整个iframe,并且该屏幕仍具有可聚焦的元素,是的,您将遇到致命的可访问性问题: 您可以聚焦某物,但不允许屏幕阅读器告知聚焦的东西。那么该怎么办 ?它应该什么都不说,还是违背您的定义?
从技术上讲,这意味着 aria-hidden = true 中不应包含任何可聚焦的元素。 您必须确保它永远不会发生。
但是,您必须问自己的一个好问题是,为什么要完全隐藏iframe中的内容,或者换句话说,明确地使其完全不可访问。
如果您担心无法控制的内容可能破坏页面的可访问性,那么
从管理上来说,基于WCAG的证书知道此问题,并且通常接受例外,即不考虑您无法控制的内容。
从屏幕阅读器用户的角度来讲,访问性很差的iframe的确可能给人的印象是,您网站的整体可访问性通常很差,但是拥有部分可访问的内容肯定比总没有内容更好。 您最好删除aria-hidden = true。即使您知道它不是很容易访问,也无论如何都要留一些机会访问它,而不是一定要阻止它。内容的可访问性可能会随着时间的推移而改善。
例外情况是,如果iframe的内容令人反感,带有装饰性,或者在您的页面上下文中没有带来任何真实信息。典型示例包括广告和各种小部件(天气,时钟,社交网络共享等) 对于这些内容,请继续保留aria-hidden = true并删除iframe的所有可聚焦元素。无论如何,它们只是无用的噪音,如果完全跳过它们,则不会后悔。