Skip to content

📄 本页由源文件 rules/浏览器兼容性规范.mdc 自动投影生成(单一权威源)。请勿直接编辑本页。

浏览器兼容性规范

本规则为浏览器兼容性检查的单一真相源,由 browser-compat skill 和 code-review L1 审查按需加载。


一、目标浏览器基线(项目可覆盖)

项目通过 package.json > browserslist.browser-compat.json 声明基线;未声明时使用「保守型」默认。

基线级别适用场景ChromeSafariFirefoxEdgeES 级别
保守型(默认)企业客户端 Web、C 端门户70+12+68+79+ES2019
标准型管理后台 / 内部工具90+14+90+90+ES2021
激进型Chrome-only 内嵌、Electron100+ES2022+

本规则所列「禁用」默认针对 保守型 基线;标准型/激进型下部分条目可放宽,按项目实际 browserslist 判定。


二、JS 禁用 API 清单

🔴 CRITICAL(保守型必须禁用,检测到即 Block)

API禁用原因替代方案
Array.prototype.at()Safari 15.4+ / Chrome 92+arr[arr.length - 1]arr.slice(-1)[0]
structuredClone()Safari 15.4+ / Chrome 98+JSON.parse(JSON.stringify(x))lodash.cloneDeep
Object.hasOwn()Safari 15.4+ / Chrome 93+Object.prototype.hasOwnProperty.call(obj, key)
Array.prototype.toSorted/toReversed/toSplicedSafari 16+ / Chrome 110+[...arr].sort() / [...arr].reverse()
Object.groupBy / Map.groupBySafari 17.4+ / Chrome 117+arr.reduce((acc, x) => { ... })
Promise.withResolversSafari 17.4+ / Chrome 119+let resolve, reject; new Promise((r, j) => { resolve = r; reject = j; })
crypto.randomUUID()Safari 15.4+ / Chrome 92+uuid npm 包

🟡 WARNING(保守型下需确认项目已引入 polyfill)

注:以下 🟡 条目仅作为 AI 生成代码时的上下文参考,当前 scripts/compat-check.js 暂不做自动检测(假设项目已统一 polyfill 或特性检测)。如需扫描,建议在 code-review L1/L2 手动确认 polyfill 是否就位。

API说明
ResizeObserver项目应已 polyfill,否则 Safari 13.1 以下不可用
IntersectionObserver项目应已 polyfill
requestIdleCallbackSafari 不支持,使用前要特性检测或 setTimeout 降级

三、CSS 禁用属性清单

🔴 CRITICAL(保守型必须禁用)

属性/特性禁用原因替代方案
:has() 选择器Safari 15.4+ / Chrome 105+JS 逻辑 + className 切换
container-type / 容器查询Safari 16+ / Chrome 105+ResizeObserver + JS
color-mix()Safari 16.2+ / Chrome 111+CSS 变量 + 预计算
subgridSafari 16+ / Chrome 117+嵌套 grid 或重新设计布局
Flexbox gapSafari 14.1+(12 不支持)margin + 负 margin 抵消
aspect-ratioSafari 15.4+ / Chrome 88+padding-bottom 百分比技巧
inset 简写Safari 14.1+展开为 top/right/bottom/left
text-wrap: balance/prettySafari 17.5+ / Chrome 114+不使用,让浏览器默认换行
@layer 级联层Safari 15.4+ / Chrome 99+使用选择器优先级控制层级
accent-colorSafari 15.4+ / Chrome 93+自定义 checkbox/radio 样式

🟡 WARNING(需加前缀或降级方案)

注:以下 🟡 条目中,scripts/compat-check.js 当前仅实现 backdrop-filter 缺失 -webkit- 前缀的检测overscroll-behavior / clamp() / scroll-behavior 仅作为 AI 生成代码时的上下文参考,不参与自动扫描。

属性说明
backdrop-filter-webkit-backdrop-filter 前缀 + 不支持时的兜底背景色
overscroll-behaviortouch-action 兜底
clamp() / 复杂 calc()Safari 12 对 calc() 中单位除法支持不完整
scroll-behavior: smoothSafari 15.4+ 才支持,动画类可用 JS 平滑滚动替代

四、检查时机

  1. AI 生成代码时(本规则的首要作用)

    • 对照上述清单,禁止直接输出 🔴 项的代码
    • 🟡 项输出时必须注明降级方案或确认 polyfill 已就位
  2. code-review L1 审查第 5 条

    • 调用 use_skill('browser-compat') 对本轮 diff 执行 compat-check.js
    • 🔴 违规 → 强制修复后才能进入下一步
    • 🟡 违规 → 弹出用户决策(修复 / 加降级 / 跳过)
  3. 独立使用

    • 用户说"检查兼容性"/"这段代码能用吗" → 直接触发 browser-compat skill
  4. 项目级 pre-commit hook(可选)

    • 项目安装 scripts/git-hook-check.js 后,commit 前自动扫描 staged 文件

五、例外处理

  • 项目 .browser-compat.jsonignore 字段可声明允许使用的 API/属性(需在文件中写明业务理由)
  • 代码行级豁免:// @compat-ignore: 原因/* @compat-ignore: 原因 */
  • 全局 polyfill 已引入的项目在 .browser-compat.json > polyfills 中声明,检测脚本自动排除对应规则

六、规则版本

  • v1.0(2026-05-07):初版,覆盖保守型基线下的核心 JS/CSS 禁用清单
  • v1.1(2026-05-08):🟡 WARNING 段前新增"脚本覆盖度"说明,明确自动扫描边界

基于「单一权威源」哲学构建 —— 文档由源文件投影生成