J5.03.2ARIA misuse设计研究
错误的属性比没有属性更糟
别名: 错误 ARIA · 虚假语义 · ARIA 谎言
概念解释
树上没有这个控件,用户会当它不存在,改用别的路径。树上写着「这是复选框」而它其实是链接,用户会按复选框的脚本去操作,然后什么也不发生。错误的补充属性是一句谎言;缺失是一个洞。辅助技术信任树,谎言比洞更伤:洞还能绕,谎言会把人带进死操作。
机制
没有节点时,用户的模型是「这里没有控件」,下一步是找别的入口,代价是漏找。错误角色或错误状态时,用户的模型是「这是一只会切换的复选框」,下一步是按下切换命令——命令按契约发出,界面按另一套逻辑响应,预期破裂。信任一旦破,后面正确的播报也会被当成不可靠。
洞是沉默;谎是主动误导。阅读器用户没有像素来核对「它看起来像不像复选框」,树即全部证据。补错等于在唯一证据源上造假,所以比不补更糟。
怎么研究
同一视觉控件三种树:无补充属性、正确属性、故意写错的角色或状态。比较任务成功、首次命令、以及用户在失败后是否还肯信后续播报。
自变量:属性缺失 / 正确 / 错误。 因变量:任务完成率、错误命令次数、失败后改用视觉或其他通道的比例(若还有残视力)。
用熟练用户。新手分不清「没报」和「报错」,会把两种失败混成「阅读器不好用」。
边界
属性写了但引擎忽略(尚未实现的角色),效果接近缺失而不是谎言,伤害介于两者之间。错误若与真实行为偶尔碰巧一致,短期测不出来,换一个操作就会爆。对不走树的放大镜用户,这条几乎不成立。自动检测能抓住部分非法值,抓不住「合法但说错了」——合法的谎言正是最贵的那种。
怎么落地
- 拿不准就不要写补充属性,让对象以原生身份或纯文字存在,好过写一个与行为不符的角色。
- 发现名实不符,先删掉错的属性,再决定要不要补对的;留着错的比空着更拦路。
- 验证:听阅读器报出的类型,按该类型的惯例操作。报成某类控件却没有该类行为,立刻删属性重测——删掉之后若只是「找不到」,已经比「找错方法」轻。