把它做成生产功能之前,需要先拆开协议事实、产品承诺和运行成本,三者混在一起很容易得到错误结论。 ARIA live 监测 DOM 变化,频繁替换百分比会排队大量语音。普通进度用 progress 语义并仅在 10% 里程碑播报,错误与安全变化优先。
无障碍不是发布前补一组 aria 属性,而是让键盘、屏幕阅读器、缩放、减弱动态和高对比度用户完成同一任务闭环,并在错误后找得到下一步。
落地方案的关键部件
先把下面几项写成可评审的规则,而不是散落在回调和界面判断里。规则越清楚,后续扩容、兼容和排错越少靠猜。
- 页面常驻一个状态区域,先挂载再更新文本;连接完成与取消用 polite,权限撤销或传输失败可 assertive,重复相同文本先清理状态。
- 为状态写出唯一所有者、版本号和终态;任何回调只能修改自己创建的版本。
- 资源释放是协议的一部分:定时器、句柄、队列和临时数据都要在终态中可重复清理。
“实时状态的 ARIA Live:重要变化要读,进度每毫秒不能读”的交付标准是正常路径可用、异常路径收敛、资源有界,并且用户能理解系统为何采用当前状态。 这样得到的不是演示代码,而是能解释、能降级、能回滚的生产能力。
别让错误假设进入生产
不要把异常路径理解成弹一次提示。它还包括在途工作如何停、对端如何获知、残留数据如何处置,以及下一次操作是否会继承旧状态。
- 每个卡片各有 assertive 区域会互相打断;仅靠视觉 toast 且自动消失则屏幕阅读器完全不知道发生了什么。
- 失败被压成一个布尔值,调用方无法区分可重试、需用户介入与永久拒绝,最终形成无限循环。
- 没有背压或配额时,慢消费者会把内存、队列长度与尾延迟一起推高,最后拖累无关用户。
发布闸门应该检查什么
用已知输入和可控故障建立金样本,然后把线上低基数指标与测试结果对齐。只有指标能提前识别同类退化,验证才真正延伸到生产。
- 用 NVDA、VoiceOver 与自动 DOM 事件记录跑连接、双通知、文件和错误,核对顺序、次数、终态时延和可中断性。
- 让刷新、取消、超时和远端完成在同一调度窗口发生,断言系统只产生一个终态和一次副作用。
- 对日志和埋点做字段白名单检查,证明内容载荷、密钥、完整 IP 与用户可识别信息不会离开设备。
可以上线的标准是:用户知道当前发生了什么,系统在异常后能停止或恢复,资源不会无界增长,运维也能从最小必要证据定位阶段。