在我们的一个原生iPad应用程序中,屏幕分为多个部分。在大多数情况下,我认为它适用于VoiceOver。但其中一个部分是UIWebView
,它显示与应用程序相关的Web内容,但由其他供应商提供。它对我们来说基本上是一个黑盒子。所以我无法控制内容是什么(或者它是多么容易访问),它的内容非常密集非常密集,并且它位于屏幕的左侧,因此它在很多时候出现过(英文)阅读顺序中的其他内容。
因此,如果我要求VoiceOver阅读屏幕内容,它会很快陷入这个网页内容中,我无法想象很多人会把它粘在屏幕的其余部分。但让他们放弃并擦洗屏幕以发现事情似乎是令人讨厌的。
我希望能够做到的是将整个区域视为单个单元并使用摘要标签或标题,但仍然允许用户指向它或以某种方式将其切换为允许与Web内容进行交互。有没有办法在iOS上实现这一点(没有完全混淆辅助功能系统)?
当然,我被看见了,所以我也在某种程度上进行投机。当前用户界面是否会像我认为的那样依赖于VoiceOver的用户会感到困惑?我所描述的是我的解决方案会变得更糟糕吗?
答案 0 :(得分:3)
aria-hidden="true"
会让屏幕阅读器忽略整个内容(如果此屏幕阅读器足够现代,可以考虑WAI-ARIA.VoiceOver是。)
这不是你想要达到的目标,而且大部分时间都是不可取的:为什么屏幕阅读器用户不能阅读与其他人相同的内容,你是谁为他们决定他们能做什么/看不懂其他人不能/可以?除了在键盘陷阱等完全无法访问的已知情况下,此键盘陷阱暂时无法修复
skip link之前,此内容允许SR用户跳转到此部分之后的内容。
如果相关,已知ARIA landmark roles将允许选择他们想要阅读的页面的哪一部分(它将需要此部分作为整个侧边栏 - 补充角色 - 或主要部分。可能不是案例)
SR可以浏览标题(以及链接和顺序阅读以及现在具有里程碑意义的角色) 如果这一部分和下一部分以良好的标题开头,则可以快速绕过它 相关的WCAG 2.0技术:
如果没有标题元素并且无法修改,但是有些文本可能是相关标题,除了它是段落或项目列表或其他任何内容,它可以被标记为与ARIA等效使用role="heading"
和aria-level="N"
(请参阅role="heading")
如果你有充分的理由修改列的自然阅读顺序(我认为这是这里的情况),你可以用浮点数修改布局和flexible box layout(IE10 +)(后者有这些年来有3种不同的语法,欢迎像autoprefixer这样的插件,或SASS / Compass ......)。然后你的左栏会在标签时出现,但这需要修改很多模板的布局。
aria-describedBy
可能在某种程度上有用,但我对其用途知之甚少,也许其他人会对此有所了解。
答案 1 :(得分:2)
来自评论十六说:
不幸的是,就像我说的那样,我根本无法控制这些内容。它来自其他地方,并由我们的应用程序显示
我同意费利佩的观点。我不知道你的代码是什么样的,但是在基本HTML中这样说。您可能要么使用iframe
嵌入代码,要么将内容注入代码中(例如PHP include()
)。
无论您使用哪种方法,您可能会在其周围包裹<div>
。所以你可以做到
<div aria-hidden="true">
//iframe/inject here
</div>
让它不被AT看到。采用此基本模型,我们可以提取aria-hidden="true"
并替换为role="complementary"
。您可以将文字放在div
中,将其推出屏幕并说出一个不错的行,同样适用于aria-described by
,但您可能希望将tabindex
添加到<div aria-describedby="ex" tabindex="-1">
<p id="ex" class="offscreen">Below is useless jargon by blah blah blah. It may
be more beneficial to <a href="#something">jump to the main section</a> instead.</p>
//iframe/inject here
</div>
。例如:
{{1}}