ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

axe-core 演进史:从 CHANGELOG 看 Web 无障碍检测引擎的版本迭代与核心能力变迁

axe-core 演进史:从 CHANGELOG 看 Web 无障碍检测引擎的版本迭代与核心能力变迁 测试【免费下载链接】axe-coreAccessibility engine for automated Web UI testing项目地址https://gitcode.com/gh_mirrors/ax/axe-core点击查看免费下载导读CHANGELOG.md 是 axe-core 项目最权威的版本编年史完整记录了从 v1.0.12015 年首次公开发布到 v4.13.02026 年十余年间的功能新增、Bug 修复与破坏性变更。本文以该变更记录为主体骨架结合仓库内的 lib/ 源码、lib/rules/ 规则定义、locales/ 语言包与 package.json 构建配置帮你读懂 axe-core 的版本节奏、重大架构转折如 4.x 的规则影响一致性治理、ElementInternals 支持并掌握如何从版本号与提交信息中快速定位影响自身集成的变更点。一、变更记录的组织方式conventional commits 与 commit-and-tag-versionCHANGELOG 开头即声明本项目遵循 commit-and-tag-version 的提交规范。这意味着每条变更条目都来自符合 Conventional Commits 规范的提交信息并按语义化版本SemVer自动归类Features新增能力新规则、新 API、新语言包等对应 minor 版本Bug Fixes缺陷修复对应 patch 版本BREAKING CHANGES破坏性变更对应 major 版本另有三类从源码结构可见的常规分类Deprecations弃用预告、Performance Improvements性能优化与Type Fixes Improvements类型定义改进。这一约定也体现在 package.json 的commit-and-tag-version配置中postbump钩子会先执行pnpm ci构建再运行sri-update刷新 SRI 哈希并更新 doc/rule-descriptions.md同时skip.tag为true说明打 tag 由发布脚本pnpm run release另行控制。仓库根目录的 sri-history.json 正是历次构建产物 SHA-256 哈希的存档自 4.5.0 起官方弃用该文件但保留兼容配合package.json中的sri-update/sri-validate脚本可校验 CDN 上axe.min.js的完整性。给集成方的提示阅读 CHANGELOG 时一条条目末尾的括号内通常带有closes #issue、references #issue等元信息。例如 4.13.0 中 aria-actions 条目同时引用了 #4584、#5199、#5215 等多个 issue这表示该改动涉及多个相关讨论需要一并查阅才能理解完整上下文。二、版本节奏总览从 1.x 到 4.x 的里程碑通读全部 2083 行变更记录可以梳理出如下主线版本区间时间跨度主题1.0.1 – 2.3.x2015–2017初始公开版本、UMD/AMD 模块化、TypeScript 定义、Promise API3.0.0 – 3.5.x2017–2020Shadow DOM 全面支持、VirtualNode 抽象、WCAG 2.1 规则css-orientation-lock、autocomplete-valid 等、runPartial/runVirtualRule 新 API4.0.02020-07清理 3.x 中已弃用的规则与检查引入 standards 对象体系4.1 – 4.42020–2022新命名规则aria-dialog-name、aria-treeitem-name 等、color-contrast-enhanced、frameMessenger、pingWaitTime4.5.02022-10WCAG 2.2 规则target-size、meta-refresh-no-exceptions4.8.02023-09Consistent Rule Impact规则影响级别治理4.10 – 4.132024–2026ARIA 1.2/ElementInternals 支持、RGAA 标签、瑞典语等新语言包当前仓库锁定版本为4.13.0见 package.json 的version字段因此下文重点解读 4.x 主线特别是 4.8.0 与 4.12–4.13 两个里程碑。三、v4.0.0一次彻底的瘦身——破坏性变更清单4.0.0 是 axe-core 4.x 时代的起点其 Breaking Changes 部分列出从 3.x 继承并在 4.0 中正式移除的资产被移除的规则rulesaria-dpub-role-fallbackDPUB 角色回退checkboxgrouplayout-tableradiogroupvideo-description被移除的检查checksaria/implicit-role-fallbackforms/fieldsetforms/group-labelledbymedia/descriptiontables/has-captiontables/has-summarytables/has-th从当前仓库目录看lib/rules/ 中已不存在上述规则文件而新增的 layout-table-matches.js 则作为匹配器保留印证了规则删除、匹配逻辑另行拆分的演进路径。同时 4.0.0 引入并构建了standards 对象lib/standards/ 下的aria-roles.js、aria-attrs.js、html-elms.js、dpub-roles.js、graphics-roles.js把 ARIA/WAI-ARIA/HTML 语义数据从散落的 commons 函数中集中为一份可编程的标准表此后的角色、属性、元素语义检查全部基于该数据源驱动——这是 4.x 架构最根本的变化之一。四、v4.8.0Consistent Rule Impact——让规则影响级别一成不变4.8.0 在 CHANGELOG 中拥有独立的专题小节Consistent Rule Impact是理解 axe-core 结果模型的关键版本该版本让一条规则永远不再动态改变其报告的 impact影响级别。为了在不改变既有问题严重程度的前提下实现这一点部分规则被拆分成多条。具体拆分与调整如下弃用检查上的 impact 字段改为由规则统一定义#4114在 axe-core 4.8 之前impact 可以在 check 层面配置此后 impact 只归属 rule保证同一条规则在不同命中场景下结果一致。新增规则aria-deprecated-role#4074与aria-conditional-attr#4094用于承接原属其他规则的需要人工复核类结果。固定 impact 为 seriousaria-input-field-name、aria-toggle-field-name#4095。固定 impact 为 criticalaria-roles、aria-valid-attr-value#4112。固定 impact 为 moderatescope-attr-valid#4113。新规则aria-prohibited-attr#4088与aria-braille-equivalent#4107加入规则集。这一治理的直接后果是迁移 4.7 → 4.8 时部分问题的 impact 可能从之前的动态值变成固定值。对 CI 集成方而言若以 impact 作为阻断阈值例如serious 以上才失败升级后需要重新校验自己的阈值配置。同时 4.8.0 还弃用并默认关闭了duplicate-id/duplicate-id-active#4071duplicate-id-aria改为失败时进入 needs review并打上wcag412标签。Type 层面的连带变更4.8.0 的 Type Fixes Improvementstarget与ancestry两个属性的返回类型由string[]修正为UnlabelledFrameSelector——因为在包含 Shadow DOM 的选择器场景下string[]并不正确。任何硬编码把这两个字段当作string[]消费的调用方都需要调整。对应的类型定义文件为仓库根目录的 axe.d.ts。五、v4.12 – v4.13ARIA 1.2 与 ElementInternals 的深度支持4.12.0 与 4.13.0 是 4.x 后期最重要的能力扩展核心关键词是ElementInternals自定义元素通过attachInternals()暴露 ARIA 状态的新标准机制4.12.02026-06新增gather-internals.js外部脚本#5099用于在自定义元素尚未定义时也能采集 ElementInternals 数据axe.externalAPIs提供设置 elementInternals 数据的公开 API#5105对应源码 lib/core/public/external-apis.js公开axe.normalizeRunOptions#4998便于在外部复现 run 参数的标准化逻辑lib/core/public/run/normalize-run-params.js新增axe.resetLocale()#5108恢复默认语言源码见 lib/core/public/reset-locale.jsaxe.getRules()返回对象新增enabled字段#5118——当前实现lib/core/public/get-rules.js会结合规则自身的enabled与审计的tagExclude计算真实启用状态aria-required-attr与aria-required-parent/children等规则部分支持 internals role#5080新增utils.getElementInternals工具函数#5077。4.13.02026-08新增ElementInternals 默认启用#5284无需再通过配置开关开启ARIA 标准表新增aria-actions属性#5200当前 lib/standards/aria-attrs.js 中可看到其定义为idrefs类型、allowEmpty: true、global: true并映射到ariaActionsElements属性aria-allowed-attr将废弃 ARIA 属性标记为 needs-review#5246新增sectionheader/sectionfooter角色#5238新增aria/getAriaValue#5109与aria/hasAriaValue#5136两个 commons 函数lib/commons/aria/get-aria-value.js 的实现按attribute → property → internals三级顺序取值并且只有当attrStandard.caseInsensitive为真时才做小写归一化——这正对应 4.13.0 中standards/ariaAttrs增加caseInsensitive属性#5224的条目新增dom/getResolvedRefs#5151解析 idrefs 指向的虚拟节点roleimage与roleimg等价#5248并顺带更新了role-img-alt/svg-img-alt的元数据命名#5279新增inSectioningContent、hasChild、isSummaryForDetails三个 matches 匹配器#5262。源码印证在 lib/ 目录中检索ElementInternals命中 lib/commons/aria/get-aria-value.js、lib/commons/text/label-text.js、lib/core/base/virtual-node/virtual-node.js 与 lib/core/public/external-apis.js 等十余个文件说明 internals 支持已贯穿虚拟节点构建 → 文本计算 → ARIA 取值 → 公开 API整条链路而非个别规则的特判。迁移注意由于 ElementInternals 从 4.13 起默认开启如果你在自定义元素上通过 internals 暴露了 ARIA 语义升级后这些语义会自动进入检测范围这通常带来更准确的检测结果但也可能让此前看不见的违规突然出现建议升级后在自定义组件页面上做一次全量回归。六、新规则时间线从 WCAG 2.0 到 WCAG 2.2 的规则演进CHANGELOG 中 new-rule 条目清晰勾勒出规则集的扩张脉络版本新增规则节选3.1.0html-xml-lang-mismatch、aria-allowed-role、css-orientation-lockwcag21、autocomplete-valid3.2.0aria-hidden-focus、form-field-multiple-label从 label 拆分、label-content-name-mismatch、landmark-complementary-is-top-level3.3.0landmark-is-unique、scrollable-region-focusable、aria-input-field-label、aria-toggle-field-label、role-img-alt从 image-alt 拆分3.4.0aria-roledescription3.5.0identical-links-same-purpose、no-autoplay-audio、svg-img-alt、landmark-no-duplicate-main等重复地标规则4.1.0aria-treeitem-name、aria-dialog-name、aria-tooltip-name、aria-meter-name、aria-progressbar-name、presentation-role-conflict、select-name、aria-command-name4.2.0empty-table-header、frame-focusable-content、nested-interactive、role-text、aria-prohibited-attrARIA 1.24.4.0color-contrast-enhancedWCAG AAA4.5.0target-sizeWCAG 2.2默认关闭、meta-refresh-no-exceptionswcag2aaa默认关闭4.10.0summary-namesummary 必须有可访问名称以 4.5.0 的target-size为例当前规则定义见 lib/rules/target-size.jsonimpact: serious、enabled: false默认关闭、匹配器为widget-not-inline-matches由target-size与target-offset两个检查联合判定标签wcag22aa/wcag258/EN-9.2.5.8。4.8–4.11 的多条修复如 #4376 always pass 10x targets、#5000/#5066 对 inline 与 offscreen 元素的豁免、#5012 对display:inline目标的 clientRects 计算说明这条规则的几何计算在持续打磨。七、i18n 演进从单语言到 20 语言包CHANGELOG 中 i18n 类条目贯穿始终3.1 引入运行时本地化支持此后各版本陆续加入日语、法语、西班牙语、葡萄牙语pt_BR/pt_PT、德语、巴斯克语、希腊语、意大利语、简体/繁体中文、希伯来语、挪威语、波兰语、俄语、瑞典语等。当前仓库的 locales/ 目录共存 19 个语言文件与 locales/_template.json 模板4.12.0 还修复了 locale 子标签设置#5112并新增axe.resetLocale()配合package.json中translate/--all-lang构建脚本可产出单语言或多语言版本的axe.min.js。对产品团队而言这意味着无障碍报告的提示文案可以随产品语言本地化同时 CHANGELOG 中大量 locale: proofread/typos 类修复提示语言包属于持续维护资产升级时建议顺带同步更新。八、API 与类型系统演进集成方最关心的兼容面运行 API2.1.7 引入 Promise 化的axe.run()替代axe.a11yCheck()3.4 起axe.run可接受字符串形式的runOnly4.3.0 强化4.0 起options.ancestry可为节点附加 CSS 选择器4.3 增加axe.runPartial()与getFrameContexts()lib/core/public/run-partial.js支撑无 iframe 通信的测试场景。配置与消息4.4.0 将branding由对象改为字符串4.2 引入axe.frameMessenger与allowedOriginslib/core/public/frame-messenger.js并新增pingWaitTime配置调节 iframe 探测超时。类型定义根目录 axe.d.ts 与 typings/axe-core/axe-core-tests.ts 是类型层演进的载体CHANGELOG 中 4.3 的PartialResults、4.4 的NodeList上下文、4.7 的setup/teardown与 reporter 定义、4.8 的UnlabelledFrameSelector、4.11 的nodeSerializer类型、4.12 的RuleMetadata.enabled可选化#5129都直接影响 TypeScript 用户的编译通过率。九、性能优化史大型站点的检测成本控制自动检测引擎的实用门槛是性能CHANGELOG 中的 Performance 条目可作为调优参考选择器层4.5.0 greatly improve the speed of querySelectorAll#3423、3.0-beta normalize all selectors for better cache utilization颜色对比3.5.0 greatly improve performance for very large sites#1943、4.0 基于elementsFromPoint的重构、4.1 greatly improve color-contrast-matches speed规则调度3.2.0 Defer rules rather than checks#1308、performanceTimer指标3.3 起为规则增加计时4.11 修复其在 iframe 中的表现 #4834布局网格4.8.0createGrid只把可见的非溢出区域加入网格#41014.5.2 又修正了滚动出视野元素的网格收录#3773。仓库 perf/ 目录存放了 v4.11.0 至 v4.13.0 的报告 JSON 与对比脚本perf/compare.js、perf/report.jspackage.json提供perf:report脚本可复现各版本在 perf/sites/ 样本页如 MDN 页与超长页面上的耗时对比。十、如何把 CHANGELOG 变成你的升级手册综合上述分析建议在升级 axe-core 时按以下顺序使用 CHANGELOG先扫 Breaking Changes / Deprecations 小节确认目标版本与前序版本之间是否有移除的规则、检查或 API如 4.0.0 的移除清单对照你自己的axe.configure({ rules: ... })配置是否引用了已消失的 ID再读该版本的 Features 与 Fixes重点查看你依赖的规则 ID如color-contrast、target-size、aria-*是否出现并结合 lib/rules/ 下同名.json文件的enabled、impact、tags字段判断默认行为变化核对类型定义若项目使用 TypeScript检查axe.d.ts变更是否波及RunOptions、NodeResult等类型关注 i18n 与 sri语言包更新可通过 locales/ 核对sri-history.json与pnpm run sri-validate可校验 CDN 产物哈希用 ACT/集成测试兜底仓库的 test/act-rules/W3C ACT 规则对照测试、test/integration/浏览器端到端与 test/aria-practices/APG 模式测试在升级后全量跑一遍是最可靠的回归手段。一句话总结axe-core 的 CHANGELOG 不只记录改了什么更记录了它如何从单一页面检测库演化为覆盖 WCAG 2.0/2.1/2.2、ARIA 1.2、ElementInternals、多语言与 iframe/Shadow DOM 复杂场景的可编程无障碍检测平台读懂版本间的语义变化是安全升级、准确配置规则集的前提。赞分享测试【免费下载链接】axe-coreAccessibility engine for automated Web UI testing项目地址https://gitcode.com/gh_mirrors/ax/axe-core点击查看免费下载相关推荐chroma.js 版本演进全解从 CHANGELOG 看 JavaScript 颜色库的核心能力迭代chroma.js 版本演进全解从 CHANGELOG 看 JavaScript 颜色库的核心能力迭代 本文以 chroma.js 官方变更日志 CHANG前端数据可视化Cadence 版本演进全解析从 CHANGELOG 看核心能力迭代与升级运维实践Cadence 版本演进全解析从 CHANGELOG 看核心能力迭代与升级运维实践 Cadence 是一个分布式、可扩展、持久且高可用的编排引擎用于以可扩展后端任务调度工作流自动化微服务grpc-web 版本演进全解析从 CHANGELOG 读懂 gRPC for Web Clients 的能力迭代史grpc web 版本演进全解析从 CHANGELOG 读懂 gRPC for Web Clients 的能力迭代史 grpc web 是 Google 开源后端微服务上一篇WindowsCleaner让Windows用户实现系统空间高效管理的实战指南下一篇mlx-community/chatterbox-multilingual-v329种语言文本转语音的终极解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表