Token导航 LogoToken导航TokenDH.com
开发操作浏览器clawhub未标认证来源可访问clear审计通过

a11y-label-audita11y label 审核

Agent Skill

用于辅助无障碍访问检查、页面可用性审计和前端可访问性改进。它适合让 Agent 检查语义标签、键盘操作、颜色对比、ARIA 属性和自动化检测结果。使用时需要结合真实页面和浏览器验证,不应只依赖静态文本判断;涉及修复建议时,应兼顾设计系统、组件复用和 WCAG 等通用无障碍规范。

总安装

4,647

周安装

188

GitHub Stars

公开资料未说明

下载量

1,459
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:a11y-label-audit(a11y label 审核)
来源仓库:https://github.com/ityhg/a11y-label-audit
安装命令:
openclaw skills install a11y-label-audit
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install a11y-label-audit

简介

自动检测React/TSX组件中缺失的无障碍标签并修复。

  • 识别图标按钮无aria-label、表单未关联label等问题。
  • 支持弹窗焦点管理与动态内容aria-live属性补全。
  • 安装命令:openclaw skills install a11y-label-audit。
  • 修复方案应结合设计系统上下文审慎应用。

SKILL.md

name
a11y-label-audit
description
>-

无障碍标签审查与自动修复

扫描当前目录或指定文件中 React/TSX 组件缺失的无障碍(a11y)标注,并自动修复。

快速开始

  1. 确定扫描范围 — 用户可提供文件、目录或组件名。默认:当前工作目录。
  2. 扫描 — 按照下方的检测规则搜索无障碍违规项。
  3. 报告 — 按文件分组列出所有发现,包含行号和违规类型。
  4. 修复 — 自动应用修复,保留现有代码风格和缩进。

检测规则

规则 1:纯图标按钮(icon-button-a11y)

检测:可点击元素中仅包含图标组件(如 <YbIcon><Icon><SvgIcon><img>),没有可见文本,也没有 aria-label / aria-labelledby

修复:根据图标的 type / name 属性或上下文推断标签内容,添加 aria-label。如果项目使用 i18n 函数(t()),用其包裹标签文本。

规则 2:div 模拟按钮(div-button-a11y)

检测<div><span> 带有 onClick 处理器但缺少:

  • role="button"
  • tabIndex={0}
  • onKeyDown / onKeyPress 键盘事件处理(Enter/Space 触发点击)

修复:添加 role="button"tabIndex={0},以及一个在 Enter/Space 时触发点击的 onKeyDown 处理器。

规则 3:图片 alt 文本(img-alt-a11y)

检测<img> 元素中:

  • alt 属性完全缺失
  • alt 为无意义值,如 alt="image"alt="photo"alt="picture"alt="icon"

装饰性图片使用 alt=""合法的,不应标记。

修复:根据上下文(文件名、周围文本、父组件语义)添加描述性 alt。如确为装饰性图片,添加 alt=""role="presentation"

规则 4:表单标签(form-label-a11y)

检测<input><textarea><select> 没有关联的 <label>(通过 htmlFor / 包裹方式)或 aria-label / aria-labelledby

修复:根据 placeholder、附近标题或父级上下文推断文本,添加 aria-label。可行时优先使用显式的 <label> 包裹。

规则 5:弹窗/对话框无障碍(dialog-a11y)

检测:弹窗/对话框组件(如 DialogModalYbcDialogDrawer)缺少:

  • aria-modal="true"(如果底层库未设置)
  • aria-labelledbyaria-label 指向对话框标题
  • 焦点捕获 / 焦点归还逻辑

修复:添加指向标题元素 id 的 aria-labelledby,或在无标题元素时添加 aria-label。焦点管理问题以警告形式标注。

规则 6:实时区域(live-region-a11y)

检测:动态内容区域(Toast 通知、加载状态、错误提示、聊天消息)缺少 aria-livearia-atomicrole="status" / role="alert"

修复:添加合适的 aria-live="polite"(默认)或 aria-live="assertive"(错误/警告),以及需要整体重新播报时添加 aria-atomic="true"

扫描工作流

任务进度:
- [ ] 步骤 1:确定扫描范围(文件/目录)
- [ ] 步骤 2:按 7 条规则搜索违规项(含兼容性)
- [ ] 步骤 3:汇总审查报告
- [ ] 步骤 4:应用自动修复
- [ ] 步骤 5:验证修复未引入新问题

步骤 1:确定扫描范围

使用 Glob 查找目标目录下所有 .tsx 文件:

**/*.tsx

排除 node_modulesdistbuild.next__tests__*.test.tsx*.spec.tsx

步骤 2:搜索违规项

针对每条规则,使用 Grep 查找潜在违规项:

纯图标按钮:

onClick.*<(YbIcon|Icon|SvgIcon)

然后验证父级可点击元素是否存在 aria-label

div 模拟按钮:

<(div|span)[\s\S]*?onClick

然后验证是否存在 role="button"tabIndex

缺失 alt:

<img[\s\S]*?(?!alt=)

未标注的表单元素:

<(input|textarea|select)[\s\S]*?(?!aria-label)

未标注的弹窗:

<(Dialog|Modal|YbcDialog|Drawer)

然后验证是否存在 aria-labelledbyaria-label

缺少实时区域标注的动态内容:

(toast|Toast|notification|Notification|loading|Loading|errorMsg|errorMessage)

然后验证附近是否存在 aria-liverole="alert" / role="status"

兼容性问题:

inert[^a-zA-Z]

检查是否有 inert 回退。

:focus-visible

检查是否有 :focus 基础样式回退。

suppressHydrationWarning

检查同一元素是否有正确的 alt / aria-label

role="(status|alert|feed)"

在微信/QQ 环境中这些 role 不可靠,检查是否有语义化元素替代或多通道回退。

步骤 3:汇总报告

按以下格式输出审查结果:

## 无障碍审查报告

### 文件:src/components/Example.tsx

| 行号 | 规则 | 问题 | 建议修复 |
|------|------|------|----------|
| 42 | icon-button-a11y | onClick div 中的 `<YbIcon>` 缺少 aria-label | 添加 `aria-label={t('关闭')}` |
| 78 | div-button-a11y | `<div onClick>` 缺少 role 和键盘交互 | 添加 `role="button"` tabIndex={0} onKeyDown |

步骤 4:应用修复

使用 StrReplace 逐项应用修复。保留:

  • 现有缩进风格(空格 vs Tab)
  • 代码格式(引号风格与周围代码一致)
  • i18n 包裹:若项目使用 t() / useTranslation,用其包裹标签文本

步骤 5:验证

修复后,对修改过的文件运行 ReadLints,检查是否引入了新错误。

框架特定注意事项

TDesign 组件

TDesign 的 ButtonDialogInput 等通常内部处理了基本无障碍。重点关注:

  • 覆盖或遗漏了内置属性的自定义包装组件
  • contentchildren 等提供隐式标签的 props

@tencent/yb-component

YBButtonYbcDialog 是薄层封装。检查 a11y props 是否被正确透传。如果封装层吞掉了 aria-* props,需要标记。

Next.js <Image>

Next.js 的 Image 组件默认要求 alt 并会发出警告。仍需验证 alt 文本是否有实际意义。

规则 7:跨平台兼容性(compat-a11y)

本项目运行在多种平台上,不同引擎对无障碍 API 的支持存在差异,修复时必须考虑兼容性。

目标平台一览

平台引擎无障碍支持等级
桌面端(Tauri macOS)WKWebView较好,VoiceOver 支持完整
桌面端(Tauri Windows)WebView2 (Chromium)好,NVDA/JAWS 支持完整
桌面端(Tauri Linux)WebKitGTK一般,Orca 支持有限
Chrome/Edge 扩展Chromium
微信内置浏览器自研 X5 / 系统 WebView较差,部分 ARIA 属性被忽略
QQ 内置浏览器MQQBrowser 内核较差
PC 微信Chromium 内嵌一般
企业微信系统 WebView一般
小程序 WebView受限沙箱差,焦点管理受限

兼容性检测规则

7a. inert 属性兼容(compat-inert)

inert 属性在旧版 WebView 中不被支持。如果使用了 inert,需要同时提供 polyfill 或回退方案(aria-hidden="true" + tabIndex={-1})。

7b. <dialog> 元素兼容(compat-dialog)

原生 <dialog> 元素在 X5 内核、旧版 WKWebView、小程序 WebView 中可能不受支持。优先使用库组件(TDesign Dialog / YbcDialog)而非原生 <dialog>

7c. focus-visible 伪类兼容(compat-focus-visible)

:focus-visible 在微信 X5 内核中可能不生效。需要同时保留 :focus 样式作为回退:

.btn:focus { outline: 2px solid var(--focus-color); }
.btn:focus:not(:focus-visible) { outline: none; }
.btn:focus-visible { outline: 2px solid var(--focus-color); }

7d. aria-live 在受限 WebView 中的兼容(compat-live-region)

微信/QQ 内置浏览器中 aria-live 可能不触发屏幕阅读器播报。对于关键通知,除了 ARIA 标注外,建议同时提供视觉反馈(如 Toast 动画)和触觉反馈(如震动 API)作为多通道回退。

7e. 焦点管理在小程序 WebView 中的限制(compat-focus-trap)

小程序 WebView 沙箱中 document.activeElement 和程序化 focus() 行为不一致。弹窗焦点捕获应通过库组件实现,避免直接操作 DOM focus。检查是否存在 isMpWebview 条件分支来处理此类差异。

7f. role 属性在 X5 内核中的支持(compat-role)

微信 X5 内核对某些 ARIA role(如 role="status"role="alert"role="feed")支持不完整。在这些环境中,优先使用语义化 HTML 元素(<button> 替代 role="button"<nav> 替代 role="navigation")。

7g. suppressHydrationWarning 与无障碍的交叉(compat-hydration)

项目中大量使用 suppressHydrationWarning。检查设置了此属性的 <img> 元素是否同时有正确的 alt,防止 SSR/CSR 不一致导致 alt 文本丢失。

兼容性修复策略

  1. 优先使用语义化 HTML — 原生 <button><a><input> 在所有引擎中的无障碍支持都优于 ARIA 标注的 <div>
  2. ARIA 作为增强而非依赖 — 先确保语义化,再用 ARIA 补充
  3. 多通道反馈 — 不依赖单一的辅助技术 API,结合视觉、听觉、触觉反馈
  4. 平台条件分支 — 利用项目现有的 isDesktopisMpWebviewisWeChat 等环境检测,为受限平台提供替代方案
  5. 渐进增强 — 使用特性检测(if ('inert' in HTMLElement.prototype))而非 UA 嗅探

修复优先级

当存在大量违规时,按以下顺序修复(影响从高到低):

  1. 交互控件缺少标签(纯图标按钮、div 模拟按钮)— 完全阻碍使用
  2. 表单缺少标签 — 无法输入
  3. 图片缺少 alt — 信息丢失
  4. 弹窗缺少 aria 属性 — 导航混乱
  5. 实时区域 — 降低实时感知

补充资料

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

95.92%
按下载量换算1,399

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills