Rome 无障碍 lint 规则 useMediaCaption 详解:强制 audio/video 元素提供字幕轨道
开发工具CLILint格式化静态分析代码质量构建工具【免费下载链接】toolsUnified developer tools for JavaScript, TypeScript, and the web项目地址https://gitcode.com/gh_mirrors/to/tools点击查看免费下载本篇技术指南聚焦 Rome本仓库统一 JavaScript/TypeScript 与 Web 开发工具链的 lint 规则useMediaCaption。该规则用于保证页面中的audio与video多媒体元素必须携带用于字幕的track子元素属于 Rome 默认推荐的 a11y无障碍规则。阅读完本文你将掌握该规则的判定逻辑、合法与非法写法、在rome.json中的配置方式以及其与 ESLint 插件 jsx-a11ymedia-has-caption的对应关系。规则概览项目说明规则名称useMediaCaption引入版本v12.0.0推荐状态是Rome recommended所属分组a11y无障碍诊断分类lint/a11y/useMediaCaptionESLint 对应规则media-has-caption规则的核心职责强制audio和video元素必须包含一个track元素用于字幕captions。规则文档位于 website/src/pages/lint/rules/useMediaCaption.md其声明与注册代码位于 crates/rome_js_analyze/src/analyzers/a11y/use_media_caption.rs。为什么需要这条规则字幕captions不仅服务于听力障碍用户也为所有观众提供音频信息的文字呈现。Rome 在规则诊断中给出的注释说明如下Captions support users with hearing-impairments. They should be a transcription or translation of the dialogue, sound effects, musical cues, and other relevant audio information.即字幕服务于听力受损用户其内容应当是对话、音效、音乐提示及其他相关音频信息的转录或翻译。这与 HTML 标准中track kindcaptions的语义一致——captions类型表示对白与关键音效的文字化而subtitles仅提供翻译文本不含音效描述因此该规则只认可kindcaptions。规则的判定逻辑源码级解读从 crates/rome_js_analyze/src/analyzers/a11y/use_media_caption.rs 的实现可以看出规则以AstAnyJsxElement为查询对象逐一对 JSX 元素执行如下判定流程元素名匹配仅当元素的名称 token 为video或audio时进入检查源码第 51-52 行。跳过条件一muted属性若元素带有muted属性无论取值如何直接视为合法、不报错第 53 行。其语义是静音视频不产生可听内容因此无需字幕。跳过条件二展开属性若元素带有 JSX 展开属性spread attribute如{...props}规则直接跳过第 54-57 行。因为字幕轨道可能通过展开属性注入静态分析无法确认规则选择放行以避免误报。子元素检查对于显式闭合的audio.../audio/video.../video元素规则遍历其全部子元素找出track元素并要求其kind属性的初始值为字符串captions大小写不敏感源码第 80-90 行通过to_lowercase()比较。判定结果若元素既非muted、也无展开属性、且不包含kindcaptions的track子元素则报告诊断。自闭合形式的video //audio /因为没有子元素可承载track必然触发诊断源码第 100 行直接返回节点范围。诊断信息由 use_media_caption.rs 生成主消息为 Provide atrackfor captions when usingaudioorvideoelements.并附上上述关于字幕用途的提示。诊断分类lint/a11y/useMediaCaption在 crates/rome_diagnostics_categories/src/categories.rs 中定义。非法写法Invalid规则文档与源码测试 crates/rome_js_analyze/tests/specs/a11y/useMediaCaption/invalid.jsx 共同覆盖了以下所有触发诊断的写法video /audiochild/audioaudiotrack //audioaudiotrack kindsubtitles //audiovideotrack //videovideotrack kindsubtitles //videovideoFoo/videoaudioFoo/audio需要特别注意的是仅仅存在track元素是不够的kind必须为captionskindsubtitles同样会被判为非法如上述第 4、6 个示例所示。命令行运行后Rome 会输出形如下方的诊断a11y/useMediaCaption.js:1:2 lint/a11y/useMediaCaption ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✖ Provide a track for captions when using audio or video elements. 1 │ video / │ ^^^^^^^^ ℹ Captions support users with hearing-impairments. They should be a transcription or translation of the dialogue, sound effects, musical cues, and other relevant audio information.合法写法Valid规则文档与测试 crates/rome_js_analyze/tests/specs/a11y/useMediaCaption/valid.jsx 覆盖了以下合法场景audio track kindcaptions {...props} / /audiovideo muted {...props}/video规则认可的合法写法类型包括包含kindcaptions的track子元素audiotrack kindcaptions //audio videotrack kindcaptions //videokind取值大小写不敏感Captions同样合法源码通过to_lowercase()归一化比较audiotrack kindCaptions //audio videotrack kindCaptions //video多个track中只要存在一个kindcaptions即合法audiotrack kindCaptions /track kindsubtitles //audio videotrack kindCaptions /track kindsubtitles //video带muted属性的多媒体元素属性值true或裸属性均合法audio muted{true}/audio video muted{true}/video video muted/video带展开属性的元素字幕可能由 props 注入静态分析放行audio {...props} / video {...props} /非多媒体元素与自定义组件不受影响div / MyDiv /在 rome.json 中配置该规则useMediaCaption在配置层面对应字段use_media_caption类型为OptionRuleConfiguration定义于 crates/rome_service/src/configuration/linter/rules.rs。由于该规则在 declare_rule! 中标记为recommended: true它默认随 Rome 的推荐规则集生效无需显式声明。如需在项目中显式启用或关闭该规则可在rome.json的linter.rules.a11y下按名称useMediaCaption配置{ linter: { rules: { a11y: { useMediaCaption: error } } } }常用取值说明取值效果error触发时作为错误报告默认推荐行为warn触发时仅输出警告off关闭该规则不再检查若需关闭整个 a11y 分组后再单独开启某条规则可配合分组的recommended开关组合使用。规则属于a11y分组这一事实与诊断分类路径lint/a11y/useMediaCaption一致。更完整的规则禁用与选项说明参见仓库中的 linter 文档对应原文中的 Disable a rule 与 Rule options 两节。与 ESLint jsx-a11y media-has-caption 的对应关系Rome 官方将该规则标注为 ESLint 插件eslint-plugin-jsx-a11y中media-has-caption规则的等价实现这一点同时记录在规则文档与 规则源码 的注释中。因此如果你此前在 ESLint 项目中使用过jsx-a11y/media-has-caption迁移到 Rome 时可直接用useMediaCaption获得同等的无障碍检查能力无需重复配置两套规则。如何验证规则行为仓库为每条 lint 规则维护了结构化的测试用例useMediaCaption的输入样例位于 crates/rome_js_analyze/tests/specs/a11y/useMediaCaption/invalid.jsx 与 valid.jsx对应的诊断快照分别为invalid.jsx.snap与valid.jsx.snap。这些样例覆盖了上文列举的几乎所有边界情况缺失track、错误kind、大小写、muted、展开属性、自定义组件是理解规则精确行为的首选参考资料。你也可以直接对自己项目中的 JSX/TSX 文件运行 Rome 的 lint 检查观察该规则的实际诊断输出。小结useMediaCaption是 Rome 默认开启的无障碍 lint 规则之一通过静态分析 JSX 中的audio/video元素确保多媒体内容始终提供kindcaptions的字幕轨道从而兼顾听力受损用户的信息获取需求。掌握它的触发条件缺track、kind非 captions与豁免条件muted、展开属性即可在日常开发中写出既合规又符合无障碍实践的多媒体代码。赞分享开发工具CLILint格式化静态分析代码质量构建工具【免费下载链接】toolsUnified developer tools for JavaScript, TypeScript, and the web项目地址https://gitcode.com/gh_mirrors/to/tools点击查看免费下载相关推荐Rome Lint 规则 noDoubleEquals强制使用 与 ! 的 Lint 规则及自动修复实现Rome Lint 规则 noDoubleEquals强制使用 与 ! 的 Lint 规则及自动修复实现 本文以 Rome 官方文档中的 noDo开发工具CLILint格式化静态分析代码质量构建工具TiDB In Action基于4.0版本的分布式数据库终极指南TiDB In Action基于4.0版本的分布式数据库终极指南 TiDB 是一款开源的分布式 NewSQL 数据库基于 4.0 版本的《TiDB In A开发工具CLILint格式化静态分析代码质量构建工具Front-End-Checklist 无障碍规则实战为 meter 元素提供可访问名称aria-meter-nameFront End Checklist 无障碍规则实战为 meter 元素提供可访问名称aria meter name 导读 本文基于 Front End上一篇text-to-video-synthesis-colab社区精选15个令人惊叹的AI视频作品及提示词分享下一篇GitHub_Trending/co/content JavaScript应用快速开发MDN辅助工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

换个模型就得重写调用代码?TaoToken 这样改 LangChain 的 ChatOpenAI base_url

换个模型就得重写调用代码?TaoToken 这样改 LangChain 的 ChatOpenAI base_url

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 3:21:18 阅读更多 →
团队AI编程助手选型:多人协作能力才是核心,六张底牌看清差异

团队AI编程助手选型:多人协作能力才是核心,六张底牌看清差异

最近好几个团队的负责人跟我聊起编程助手的选型,口径出奇一致:“我们买了XX的个人版,大家用得挺嗨,一上多人协作就完蛋,代码风格乱七八糟,权限也没法管,最后只能退回去。”这种情形见多了之后&a…

2026/9/20 3:21:18 阅读更多 →
AssetRipper 完全指南:5 步提取并分析 Unity 游戏资源

AssetRipper 完全指南:5 步提取并分析 Unity 游戏资源

AssetRipper 完全指南:5 步提取并分析 Unity 游戏资源 【免费下载链接】AssetRipper GUI application to analyze game files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper 先说结论:AssetRipper 是一款开源 GUI 工具&#xff…

2026/9/20 3:21:18 阅读更多 →

最新新闻

变频器试验与测试:非正弦波形谐波功率测量与GB/T12668

变频器试验与测试:非正弦波形谐波功率测量与GB/T12668

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 4:01:57 阅读更多 →
florr.io花瓣构筑全解析:从基础逻辑到实战配装思路

florr.io花瓣构筑全解析:从基础逻辑到实战配装思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 4:01:57 阅读更多 →
TiXL 图像分析算子库(Lib.image.analyze)完全指南:从亮度检测、运动追踪到波形示波器

TiXL 图像分析算子库(Lib.image.analyze)完全指南:从亮度检测、运动追踪到波形示波器

TiXL 图像分析算子库(Lib.image.analyze)完全指南:从亮度检测、运动追踪到波形示波器 【免费下载链接】t3 TiXL is an open source software to create realtime motion graphics. 项目地址: https://gitcode.com/GitHub_Trending/t3/t3 …

2026/9/20 4:01:57 阅读更多 →
Google Research Activation Clustering:基于无监督聚类的深度神经网络可解释性实战指南

Google Research Activation Clustering:基于无监督聚类的深度神经网络可解释性实战指南

Google Research Activation Clustering:基于无监督聚类的深度神经网络可解释性实战指南 【免费下载链接】google-research Google Research 项目地址: https://gitcode.com/gh_mirrors/go/google-research 导读 本文围绕 google-research 仓库中的 activat…

2026/9/20 4:01:57 阅读更多 →
CANN ops-math Range 算子技术指南:等差数列生成算子的接口调用与源码实现剖析

CANN ops-math Range 算子技术指南:等差数列生成算子的接口调用与源码实现剖析

算子库人工智能CANN 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math 点击查看 免费下载 Range 算子是 CANN ops-math 数学算子库中用于生成等差数列的基础算…

2026/9/20 4:01:57 阅读更多 →
Netcode for Entities 实战指南:3 步跑通预测回滚的 ECS 网络同步拆解

Netcode for Entities 实战指南:3 步跑通预测回滚的 ECS 网络同步拆解

Netcode for Entities 实战指南:3 步跑通预测回滚的 ECS 网络同步拆解 【免费下载链接】EntityComponentSystemSamples 项目地址: https://gitcode.com/GitHub_Trending/en/EntityComponentSystemSamples 多人游戏里最劝退的体验:按下方向键&…

2026/9/20 4:00:56 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →