返回知识中心
平台

浏览器组件兼容性复核

用受控测试、可访问性检查和有边界的发布决策复核浏览器组件,帮助团队比较版本并记录回滚条件。

BotBrowser Team

文档中心

想直接进入 平台 文档吗?

这篇文章属于博客内容库。若你要步骤化配置、参考说明和持续更新,请直接进入对应 docs 分区。

自定义元素依次经过注册、Shadow DOM、可访问性检查和发布决策

Web Components 包含 custom elements、Shadow DOM、模板和 slots。复核不能只看 customElements 是否存在,还要观察生命周期、组合、样式、表单、焦点和用户可见结果。参考 WHATWG 规范 与 MDN 指南,把浏览器能力与应用契约分开。

契约与受控 fixture

记录标签、属性、属性值、事件、slots、状态、表单值和键盘行为。比较 first-known-good 与 candidate 时固定 bundle、Profile、平台、viewport、语言、权限和数据。保留原生 HTML fallback,保留用户输入,并在每个分支清除监听器、计时器和临时节点。检查 upgrade、重复 callback、重复注册、空和命名 slot、slotchange、继承样式、composed event、FormData、disabled、reset、validation、可访问名称、Tab 顺序和 Escape。

async function runFixture() {
  const host = document.createElement('div');
  host.innerHTML =
    '<form><label>项目 <input name="project" value="alpha"></label><web-status><span slot="label">就绪</span></web-status><button>继续</button></form><p id="status" role="status"></p><button id="fallback" hidden>使用标准表单</button>';
  document.body.append(host);
  const status = host.querySelector('#status');
  const fallback = host.querySelector('#fallback');
  try {
    if (!('customElements' in window) || !('attachShadow' in Element.prototype)) {
      fallback.hidden = false;
      status.textContent = '使用标准表单';
      return 'blocked';
    }
    class WebStatus extends HTMLElement {
      connectedCallback() {
        const root = this.attachShadow({ mode: 'open' });
        root.innerHTML = '<span><slot name="label"></slot></span>';
      }
    }
    if (!customElements.get('web-status')) customElements.define('web-status', WebStatus);
    await customElements.whenDefined('web-status');
    status.textContent = '已提交';
    return 'supported';
  } catch (e) {
    fallback.hidden = false;
    status.textContent = '使用标准表单';
    return 'application';
  } finally {
    host.remove();
  }
}

工作表与决策表

组件/版本;浏览器、Profile、平台;fixture 与契约;注册和 Shadow DOM;
表单值;键盘、名称、焦点、状态;应用结果和 fallback;
first good/first bad;负责人、下一步、回滚期限。
观察分类有边界的动作
所有检查在同一 fixture 通过支持纳入 candidate 并保存证据
API 存在但契约失败应用问题修复组件,不先归因浏览器
固定变量后只在更新后改变候选回归重跑、指定负责人、临时回滚
只有某 Profile、策略或平台失败环境问题修复环境并重跑
结果交替间歇性保存失败并调查 timing
变量或证据不完整未知暂停决定并做单变量比较

BotBrowser 支持在受控浏览器 context 中重复已授权的 Web Components fixture,并比较注册、渲染和可见交互结果。BotBrowser 不会认证标准符合性、可访问性、组件质量或生产一致性。请附上 BotBrowser 文档 和未测试边界,保留 fallback,直到组件、浏览器和可访问性负责人共同批准。

注册与生命周期

确认标签只注册一次,并检查 parser 创建、动态插入、移除、重新插入和导航后的状态。分别记录注册、渲染、事件和清理失败,避免把应用问题误判为浏览器问题。

渲染与可访问性

检查可见名称、角色、状态、焦点指示、键盘操作、缩放、长文本和错误提示。表单组件还要验证 disabled、required、reset、validation 和提交值。

版本矩阵

为每个浏览器版本固定相同的 bundle、Profile、平台、viewport、语言、权限和合成数据。失败时记录最先改变的断言,并保留上一个已接受版本用于回滚。

发布交接

交接记录应包含组件版本、fixture 修订、浏览器版本、可见断言、证据编号、负责人和停止条件。相关实践可参考 浏览器 API 兼容性与 fallback 与 浏览器更新回归分诊。

检查边界

只在授权路径和合成数据上运行,未测试的浏览器、平台和依赖应明确标记为范围外。

最终证据

扩大矩阵前先固定已批准的契约。

导航后重复注册检查。

比较可访问名称和焦点,不只比较像素。

保留已接受版本以便回滚。

记录第一个发生变化的断言。

区分组件错误和环境错误。

使用合成数据检查表单。

没有受控状态的运行标记为未知。

检查长译文和错误提示。

为每个不确定结果指定负责人。

在矩阵的每一行使用相同的断言文本,并记录组件版本、浏览器版本和运行编号。

决定应注明范围、负责人和下一次复核日期。

来源

#Web Components#Custom Elements#Shadow DOM#浏览器兼容性#可访问性

让 BotBrowser 从研究走向生产

先用这些指南理解模型,再进入跨平台验证、隔离上下文和面向规模化的浏览器部署。