# OpenPWA 证据分层：把 Web 平台特性的「支持」「能力」「行为」当作三类不同的结论

**版本 1.0，2026-10-20** · OpenPWA 编辑团队 · 许可：CC BY 4.0 · 精简版：[https://openpwa.net/zh/about/evidence/](https://openpwa.net/zh/about/evidence/) · 固定版本：[https://openpwa.net/zh/about/evidence/v1.0/](https://openpwa.net/zh/about/evidence/v1.0/) · 英文原版：[https://openpwa.net/about/evidence/v1.0/paper/](https://openpwa.net/about/evidence/v1.0/paper/)

状态：立场文件，未经同行评审。由 AI 代理会话依据团队自己的研究材料为 OpenPWA 编辑团队起草，与 openpwa.net 其他内容一样，没有逐篇的人工签字放行。文中的实例分析建立在 OpenPWA 操作员于真实 iPhone 上完成的设备操作之上。本文是英文版 v1.0 的中文版，内容与英文版一致；如有出入，以英文版为准。

## 摘要

兼容表很擅长回答一个问题：某个特性在某个浏览器里支不支持，从哪个版本开始支持。开发可安装 Web 应用的人还需要另外两个答案，而支持表本来就不是为它们设计的：这个特性到底能做什么（给我看看），以及它在真机上、在特定系统版本和启动场景下、两项设置冲突或某个默认值生效时，实际会怎样表现。我们提出「OpenPWA 证据分层」（OpenPWA Evidence Layers），把这三件事当作三层结论：**支持**、**能力**、**行为**。每一层都有自己的原生证据类别（**文档记载**、**演示可见**、**真机实测**），每条公开发布的结论都同时标明所属层级和实际支撑它的证据类别。行为类结论按系统版本号与场景分别记录，注明日期，可以依据公开的测试流程与测试套件复现，并附带带哈希值的原始数据。行为层的结果以带日期的条件回填到支持层的对应行上（一致、补充条件、不符），而不是悄悄改写上游来源。这些要素单独看都不新：兼容数据早有注释和「部分支持」，一致性测试套件早在跑测试，演示站早在展示能力，从业者也早在发布设备笔记。本框架所做的，是把它们正式化并加以命名：按层分开，逐条结论标注证据类别；把已安装应用与设备场景下的行为当作独立的一层，配上自己的证据类别；用带日期的设备条件回填支持数据；以及跨系统升级的同机前后对照研究。本文给出各层定义和判定结论归属的步骤，提出十二条原则，并逐条套用到一项 iOS 18.6.2 主屏 Web 应用的单机研究上。

## 1. 问题所在：「支持吗？」并不是开发者最终要问的问题

支持表把一个特性压缩进一个格子：支持、不支持、部分支持、一个版本号，有时再加一条注释。这种压缩是支持表的长处，也正是一个「支持」或「不支持」会误导把 Web 应用部署到手机上的人的原因。2026-10-20 OpenPWA 在一台运行 iOS 18.6.2（版本号 22G100）的 iPhone 16 Pro 上做的研究，给出了五个具体例子。实验记录条目记作 N01 到 N66 [S1]。

**写着「不支持」，事件却触发了。** MDN browser-compat-data（BCD）把 `api.ServiceWorkerGlobalScope.notificationclick_event` 在 iOS Safari 上记为 `version_added: false` [R1]。2024 年 4 月有人在 BCD 提了 issue，报告这个事件其实会触发 [R2]。在 18.6.2 上，对已添加到主屏幕的 Web 应用，`notificationclick` 在六次点按中六次触发，`addEventListener` 和 `onnotificationclick` 属性两种注册方式都生效，对已有窗口调用 `focus()` 也成功了（N35 到 N40）。每次点按时都有一个存活的窗口；WebKit bug 268797 第 35 条评论报告「没有存活页面」时点按不触发，这种情形没有测试 [R9]。一位 BCD 贡献者说采集器做的是属性检查 `'onnotificationclick' in self` [R2]，这项检查在主屏应用控制的 worker 里为 true，在 Safari 标签页控制的同一个 worker 里为 false（N03、N18、N34）。一种解释是采集器在标签页场景里读取了这项检查，但这次研究没有证实这一点。支持表的格子给整个 iOS Safari 只记一个值，没有注释区分这两种场景。

**两个「支持」撞在了一起。** BCD 把 `<meta name="theme-color">` 和 manifest 的 `theme_color` 成员都列为 iOS Safari 15 起支持 [R3, R4]。两条记录都没有说，页面设一种颜色、manifest 设另一种颜色时会怎样。在 18.6.2 上，主屏应用的状态栏条采用页面的 `theme-color` meta，覆盖 manifest 中不同的 `theme_color`，在已经安装的应用里也是如此；只有页面没有这个 meta 时才用 manifest 的值（三个专门构建的应用，N64 到 N65-a）。优先级是行为的属性，不是支持的属性。

**一次只在某个时刻发生的复制。** WebKit 在 Safari 17.2 的说明中写道，Web 应用添加到主屏幕时，Cookie 会从 Safari 复制过去 [R5]。在 18.6.2 上，在 Safari 中设置的第一方 Cookie 在新添加的应用里出现了一次，此后两边各自独立；localStorage 和 IndexedDB 则两个方向都从未复制（N13、N16 到 N22）。支持表可以写「存储分区：支持」；光凭一个支持值，说不出「某一种存储在某一个时刻被复制一次，其他存储不复制」。

**随系统版本变化的默认行为。** 一个没有 manifest、也没有图标的页面，在 18.6.2 上添加到主屏幕后，是在 Safari 里打开的：用的是 Safari 的进程、存储和 Service Worker，`navigator.standalone` 为 false，`display-mode: browser`（N23、N63）。WebKit 的 Safari 26.0 说明写道，从 iOS 26 起，任何添加到主屏幕的网站默认都以 Web 应用方式打开 [R6]。因此，同一个页面、同一次点按，在不同系统版本上有文档记载的不同表现；我们在 iOS 26 及以后版本上的实测还没有做。支持表里「manifest」那一行的版本号体现不了这一点，带日期、带版本号的观测记录可以。

**没人列表记录的生命周期。** 用户在多任务界面把应用划掉之后，上一次启动的文档大约六秒后仍然存活，`clients.matchAll()` 能找到它；在更早的一步中，Web 应用的进程号在划掉后也没有变（N16、N38、N40）。这是一种保证、一次竞态，还是调试连接造成的假象，需要更多次运行才能回答。通知处理函数该调用 `focus()` 还是 `openWindow()`，取决于的正是这类事实，而我们读过的兼容性来源都没有记录它。

五个例子的共同点是：支持层对它自己所说的内容大体是对的，风险来自把它当作关于行为的结论来读。办法不是做一张更大的表，而是把两类结论分开，各自标明背后的证据，再把它们明确地连接起来。

## 2. 三个层级

**结论**指关于某个 Web 平台特性、读者可以据以行动的一条陈述。每条结论只属于一个层级，由它回答的问题决定；每条结论带一个证据类别，由实际支撑它的东西决定（第 3 节）。

| | 第 1 层：支持 | 第 2 层：能力 | 第 3 层：行为 |
|---|---|---|---|
| 问题 | 支持吗？从哪个版本开始？ | 能做什么？给我看看。 | 在这台设备、这个系统版本、这个场景下，究竟会发生什么？ |
| 典型写法 | 「iOS 16.4 起，Safari 在主屏 Web 应用中支持 Push API。」 | 「本页会请求通知权限并显示一条通知。去试试。」 | 「在 iOS 18.6.2（22G100）上，主屏应用的状态栏条优先采用页面的 `theme-color` meta，而不是 manifest 的 `theme_color`。」 |
| 允许的证据类别 | 文档记载 | 演示可见 | 真机实测（原生）或文档记载 |
| 原生来源 | 规范、厂商文档与发布说明、BCD | 实际调用该特性的可运行演示 | 在指定设备上按公开流程完成、带日期的一次运行 |
| 单位 | 特性 × 浏览器 × 版本范围 | 特性 × 演示 | 行为 × 设备 × 系统版本号 × 场景 × 日期 |

### 2.1 第 1 层：支持

指**来源所陈述的**、某个特性在指定浏览器和版本范围内存在、不存在、部分存在、处于标志位之后或已被移除的结论。来源自己写明的可用条件（「仅限主屏 Web 应用」「需要用户激活」）属于第 1 层结论的一部分，因为它们限定了「支持」的适用范围。第 1 层按定义就是文档记载：OpenPWA 不自己撰写支持声明，只转述并交叉核对。当 OpenPWA 的某次实测与某条支持声明相关时，实测结果仍是一条第 3 层记录，以「关系」的形式挂到支持行上（第 4 节）。

### 2.2 第 2 层：能力

指某个特性能够完成某项任务、并有一个尝试完成它的可运行页面作为支撑的结论，例如请求权限、设置角标、分享文件、接收推送。这类结论讲的是可能性。演示在某台设备上的表现，属于运行它的那个人的观察。OpenPWA 按测试流程记录下来的演示运行，产生的是第 3 层记录，而不是更强的第 2 层结论。

### 2.3 第 3 层：行为

指特性在给定条件下实际怎样表现的结论：

- **优先级**：输入相互冲突时谁生效（页面 meta 优先于 manifest）；
- **默认值**：缺少某项输入时怎样处理（没有图标时显示字母图块）；
- **场景差异**：主屏应用与 Safari 标签页；由应用控制的 worker 与由标签页控制的 worker；
- **时机与生命周期**：添加时复制 Cookie；划掉后页面仍存活；权限 Promise 一直挂起到用户作答；
- **几何与渲染**：视口 402 × 812，顶部安全区 62 px，状态栏条 `#161616`；
- **陷阱**：作用域为子路径的 worker 的推送订阅，不会由 `window.pushManager` 返回。

实测类的第 3 层结论一定写明设备、系统版本与版本号、场景和日期；文档记载类的第 3 层结论带有其来源写明的条件，往往只有一个版本号。OpenPWA 自己运行过的，类别是**真机实测**；由来源描述的，类别是**文档记载**（WebKit 在 Safari 17.2 中对 Cookie 复制的描述，在有人实测之前，就是一条文档记载类的第 3 层结论）。

### 2.4 边界情形

- **功能检测。** 像 `'onnotificationclick' in self` 这样的存在性检查，如果由来源在不区分场景的情况下报告，属于第 1 层。同样的检查由 OpenPWA 在写明的场景中运行，就是一条第 3 层记录；本例中它的结果恰恰取决于场景（应用的 worker 中为 true，标签页的 worker 中为 false），而这正是支持行所缺少的信息。
- **由运行得出的版本号**（「在 18.6.2 上可用」）是关于一个版本号的第 3 层结论。它不能确定 `version_added`，后者需要来源，或在更早的版本上实际运行。
- **限额与性能**（配额大小、时间预算）：厂商公布的限额属于第 1 层，实测得出的属于第 3 层。
- **在读者设备上运行失败的演示**是读者自己的观察，只有按测试流程复现之后才成为 OpenPWA 的结论。
- **混合陈述**（「16.4 起支持，并且只在主屏应用中触发」）拆成每层一条结论。

### 2.5 判定步骤

按顺序判断，第一个回答「是」的步骤决定归属。

1. 这条结论是否说明特性被使用时会发生什么，或者其结果怎样随设备、系统版本、启动场景或状态而变：取值、优先级、默认值、时机、生命周期、渲染、提示框？**是：第 3 层。**再判断：是 OpenPWA 按测试流程运行得出的（真机实测），还是来源陈述的（文档记载）？
2. 是否说明特性能完成某项任务，并指向一个可运行页面，但没有记录在案的运行？**是：第 2 层**，演示可见。
3. 是否说明特性是否可用、在哪里可用、从何时起可用（存在性、版本、标志位、部分支持、来源写明的可用条件）？**是：第 1 层**，文档记载。如果这条结论来自 OpenPWA 的运行而不是来源，回到第 1 步：它是挂在该行上的一条第 3 层记录。
4. 都不是：它不是平台结论（建议、历史、观点），按其性质标注，或者删除。

## 3. 证据类别与分级

本节说明哪些东西可以支撑一条结论，以及实测结果怎样分级。

### 3.1 三种证据类别

**文档记载。** 由 OpenPWA 之外的来源陈述：规范、厂商文档、发布说明、厂商工程博客、厂商 bug 跟踪系统或 BCD。展示时附来源和核对日期。BCD 的数据即便来自自动采集，在本框架中也算文档记载，因为 OpenPWA 并没有亲自观测。第三方笔记（从业者博客、论坛）也算文档记载，按本站已有的高、中、低置信度规则给出较低置信度 [S2]。文档记载类的第 3 层结论展示为 `由<来源>记载，OpenPWA 未实测`，避免被当作实测结果来读。

**演示可见。** 有一个可运行的 OpenPWA 演示在调用这项能力。展示时附演示链接，措辞邀请读者在自己的设备上试一试（「去试试」）。「演示可见」只表示演示存在、并且设计用来调用该特性，从不表示该特性在任何一台具体设备上可用。

**真机实测。** OpenPWA 在一台指定的真实设备上按公开的测试流程运行并记录了结果。要算作真机实测，一次运行必须具备以下全部内容：

- **环境信息**：设备市场名称与型号标识、系统版本与版本号、发布渠道、浏览器版本、语言与地区、非默认的功能标志、内容拦截器或 VPN 状态，以及使用的检查主机（如有）。
- **日期与时间**，含时区，整次运行和每次读取都要有。
- **场景**：标签页、主屏应用或两者；是否为全新状态；首次启动还是再次启动。
- **测试流程与测试套件**：测试编号、公开步骤，以及测试套件版本和运行中加载的每个文件的 SHA-256 哈希值。
- **事先写下的预期**：预期结果及其来源，在操作该步骤之前记录（写在检查清单或实验记录里，而非公开的预注册平台）。
- **原始数据**：仪器读数文件、截图与录屏，逐个列出哈希值。
- **结论判定**：符合预期、不符、无法定论或无法运行。
- **置信标签**（3.2）。

以上是 v1.0 的要求。18.6.2 研究在这些要求写成之前就已完成，没有全部满足。它的缺口如下 [S1]：原始读数从 N15 起才带有记录工具哈希值的附属文件；测试套件在运行时的快照只覆盖 `lab.js`、`sw.js` 和 T7 的文件，没有覆盖每个页面，其余文件只能以部署版本中的仓库版本来标识；环境记录里缺少功能标志、VPN 与 iCloud 专用代理的状态、已安装的 Safari 网页扩展是哪一个，以及系统设置中的语言与地区。

### 3.2 真机实测内部的置信标签

| 标签 | 含义 | 能否作为真机实测发布 |
|---|---|---|
| **A**，仪器读数（agent-measured） | 对页面状态的仪器读取：一段公开的探针脚本的输出，经调试协议（例如 WebKit 远程检查器协议）取得，原样存为 JSON。「代理」指运行探针的一方；数值是探针的输出，不是模型的解读 | 能 |
| **S**，截图或录屏 | 事后分析的截取画面（像素值、视频帧、截取时间） | 能 |
| **O**，观察者口述 | 只有操作员的口头报告 | 不能。保留在实验记录中，可以佐证 A 或 S 结果，不能单独成立 |

标签可以组合：「A+S」表示仪器读数与截取画面一致；「S+O」表示截取画面加上操作员的口述作背景。结果发布时写明其中最弱的必要组成部分。例如 18.6.2 的状态栏颜色来源记为 S+O：像素证据是 S，而当时屏幕上是哪一个应用，部分依赖操作员的口述。

### 3.3 日期与可复现性

一条实测结论只对一个版本号、一台设备、一个日期成立，不得通过措辞推广到其他版本（「iOS 18 会这样」）。如果另一个人在同类设备、同一系统版本号上，能按测试流程操作，加载同样的测试套件字节（以哈希值核对），并与原始数据比对，这条结论就是可复现的。系统升级后的同机复测是同条件对比：同样的硬件、同样的已安装应用、同样的测试套件文件，以升级作为干预。

复现有一个限制：研究报告写明，测试用的手机升级到 iOS 27 之后，它在 iOS 18.6.2 上的结果只能在另一台仍停留在该版本的设备上重测。这就是原始数据比文字更重要的原因。没人能再跑一遍时，公开的读数、截取画面和哈希值是审查它的唯一途径。

## 4. 各层之间的关系

各层保持分开，通过明确的关系相互连接。

### 4.1 第 3 层为第 1 层补充条件

行为结果挂到与之相关的支持行上，带三种关系之一：

- **一致**：实测与该行相符（调用 `setAppBadge(3)` 后主屏图标显示角标；BCD 记载支持 Badging）。
- **补充条件**：该行在来源未写明的某个条件下成立（声明式 Web 推送：Safari 标签页中也存在 `window.pushManager`；在两个已用子路径作用域 worker 订阅了推送的主屏应用里，`window.pushManager.getSubscription()` 返回 null）。
- **不符**：实测与来源相矛盾（`notificationclick` 在主屏应用中触发，而 BCD 记为不支持）。

支持行保留原有的来源、状态、版本与置信度。关系和条件显示在该行中，注明日期，并链接到对应运行。本框架所说的「回填」就是这个意思：支持数据获得带日期的设备条件，但不被它们改写。

### 4.2 冲突的处理与展示

「不符」是一项发现，不是需要藏起来的错误。它在行内显示为 `与<来源>不符`，附条件和运行日期，同时进入差异清单，成为向上游报告（BCD issue、WebKit bug）的候选。只有当上游来源改变，或 OpenPWA 公布了允许实测决定状态的规则（v1.0 中没有，见 P8）时，该行的状态才会改变。后一次运行与前一次不同时，两者都保留可见，各自注明版本号；新的运行不会抹掉旧的。

### 4.3 第 2 层连接另外两层

演示是读者把一条支持结论变成自己亲手检查的地方，也常常是行为测试的起点，但它对两者都不构成定论。本框架把它单独放在一层，就是为了不让「我的手机上能跑」被误读成「OpenPWA 实测过」或「厂商支持」。

## 5. 原则

**P1. 每条结论都有层级和证据类别。** 读者能看到两者，并且是文字标注，不只靠颜色区分。

**P2. 证据类别不能靠措辞升级。** 「测过」「真机验证」「实际上」及其英文对应说法，只用于已发布的真机实测运行。

**P3. 行为按系统版本号与场景分别记录。** 行为结论写明设备、系统版本与版本号、场景和日期。不同版本号各占一行。

**P4. 实测要注明日期、可复现，并附原始数据。** 测试流程、测试套件版本与文件哈希值、环境信息、原始读数与截取画面，全部以脱敏形式公开。

**P5. 预期在操作之前写下。** 先记录预期结果及其来源。「与预期不符」是一项发现。

**P6. 记录优先于口述。** 操作员的口述与读数或截取画面冲突时，以记录为准，冲突作为异常记入。只有口述的结果从不作为真机实测发布。

**P7. 更正只追加，不改写。** 错误的条目由一条新的、带日期并引用旧条目的条目来更正。被撤回的读数列为「请勿引用」，放在它被撤回的那项结果旁边。

**P8. 第 3 层为第 1 层补充条件，但不悄悄覆盖它。** 在 v1.0 中，实测从不改变支持行的状态、版本或置信度。将来若有允许这样做的规则，先作为本框架的新版本公布，再付诸使用。

**P9. 写明范围。** 样本量（设备数、版本数、运行次数）、哪些没有测试、已知的效度威胁，都是每项结果的组成部分。

**P10. 核查新颖性，标明复现。** 证实已有公开描述的结果标为复现，并引用该描述。只有找不到既有描述的结果才称为新发现，并说明检索过程。

**P11. 观察者流程保护记录。** 由人操作设备、由仪器读取时，流程规则本身就是方法的一部分。先定义每个术语再使用（例如「状态栏」指显示时间和电量的那一条）。每条消息只问一个问题。先确认某一步已经做完，再问它的结果。仪器读取进行时，屏幕保持 20 到 30 秒不动。不要通过浏览器自动化写入测试标记：在 18.6.2 研究中，safaridriver 打开的自动化窗口有自己的网站数据，和机主的 Safari 资料是分开的，写在那里的标记不会出现在测试要找的地方（N06）。

**P12. 可比运行之间冻结测试套件字节与已安装应用。** 测试套件的某个版本一旦被某次运行使用，就不再移动、重定向或修改；唯一例外是修复隐私或安全缺陷，并以附新旧哈希值的带日期勘误公布。新版本使用互不重叠的新作用域。为前后对照研究安装的测试应用，在「之后」的那次运行完成前，保持作用域和起始网址不变。

## 6. 在 openpwa.net 上的应用

本框架正在被做进本站的证据结构。定义页及其固定版本页和变更历史、真机实验室及其行为参考页，以及研究和它的数据包 [S1]，随 v1.0 一同发布。兼容表上的标记和参考页上的证据栏还在计划中，每一项上线时都会写进站点变更记录。

- **定义页。** `/zh/about/evidence/`（英文 `/about/evidence/`）以站点文风发布本框架，并提供固定版本页和变更历史。
- **兼容表（计划中）。** 矩阵的形状不变。带实测证据的行将显示「真机实测」标记和带编号、带日期的脚注，脚注写明关系（「2026-10-20 在 iPhone 16 Pro、iOS 18.6.2（22G100）上实测：在主屏应用中经两种注册方式均会触发。与 BCD 不符。」）。表格标题处将有图例，列出三个层级及其证据类别。
- **参考页（计划中）。** 在可用性横幅下方加一条证据栏：文档记载（来源与最后核验日期）· 演示可见（演示链接）· 真机实测（最近一次运行）。每一项只在存在时显示。
- **行为参考页。** 每个行为主题一页（`/zh/lab/behaviour/<主题>/`），包含问题、操作步骤、按版本号列出并带锚点的结果、文档怎么说、数据、它支撑了哪些页面，以及局限。
- **真机实验室。** 产出第 3 层的公开栏目：测试流程索引、操作指南、测试套件版本与哈希值、测试路线图、方法与效度威胁，以及各项研究。
- **研究。** 带数据包、注明日期的论文，例如 iOS 18.6.2 研究 [S1]，每篇都说明其结论属于哪一层。

## 7. 实例：逐条拆解 iOS 18.6.2 研究

研究：OpenPWA device test, 2026-10-20, iPhone 16 Pro, iOS 18.6.2 (22G100) [S1]。除特别标明外，每一行都是第 3 层结论。「L1 关系」指该结果挂到对应支持行上时会带的关系。「既有描述」说明此前是否已有公开描述（P10）。

| # | 结论（18.6.2，除注明外均为主屏应用） | 层级 | 类别与标签 | 实验记录 | L1 关系 | 既有描述 |
|---|---|---|---|---|---|---|
| 1 | 没有 manifest、没有图标的页面添加到主屏后在 Safari 中打开，使用 Safari 的存储和 worker；`display-mode: browser` | 3 | 真机实测，A+S | N23、N63 | 补充条件（iOS 26 之前，独立启动需要 `apple-mobile-web-app-capable` meta 标签或 manifest 的 `display` 值） | 文档记载（WebKit 16.4 [R38]；变化见 WebKit 26.0 [R6]） |
| 2 | 有 manifest 的应用以 standalone 方式打开，视口 402 × 812；只有 `display-mode: standalone` 匹配 | 3 | 真机实测，A+S | N13 | 一致（`display` standalone） | 文档记载（复现，补充了数值） |
| 3 | 图标优先级：180 px 的 apple-touch-icon 优先于 manifest 图标；没有它时用 manifest 的 `any` 192；都没有时显示字母图块 | 3 | 真机实测，S | N11、N63 | 补充条件（manifest `icons`） | 文档记载（firt.dev [R8]） |
| 4 | localStorage 和 IndexedDB 在 Safari 与应用之间从不复制，两个方向都不 | 3 | 真机实测，A | N13、N16 到 N20 | 补充条件（存储分区） | 文档记载（WebKit 17.2） |
| 5 | 第一方 Cookie 复制进新应用一次，此后独立；每个应用有自己的 Cookie 存储 | 3 | 真机实测，A（复制时机：中等把握） | N18 到 N22 | 补充条件 | 复现 WebKit 17.2 [R5] |
| 6 | `notificationclick` 经两种注册方式触发，六次点按六次触发，每次都有存活窗口；`focus()` 成功。无窗口情形未测 | 3 | 真机实测，A | N35 到 N40 | **不符**（BCD `version_added: false`） | BCD issue #22959 中有开发者报告 [R2]；复现并补充细节 |
| 7 | `'onnotificationclick' in self` 在应用控制的 worker 中为 true，在标签页控制的 worker 中为 false | 3 | 真机实测，A | N03、N18、N34 | 补充条件；解释了采集器的结果 | 就我们所查，**为新发现** |
| 8 | 点按后出现权限提示；`requestPermission()` 一直挂起到用户作答（2068 ms） | 3 | 真机实测，A+S | N53、N54、N58、N59 | 一致 | 文档记载 |
| 9 | 一次授权同时覆盖两个推送管理器；worker 作用域为子路径时，`window.pushManager.getSubscription()` 返回 null。根作用域 worker 未测 | 3 | 真机实测，A | N32、N33、N41 | 补充条件（声明式 Web 推送那一行） | 与 WebKit 声明式 Web 推送文章一致 [R7] |
| 9b | 普通 Safari 标签页中存在 `window.pushManager`，而 `PushManager` 和 `Notification` 不存在（仅暴露情况） | 3 | 真机实测，A | N03、N41 | 补充条件 | 就我们所查，**为新发现** |
| 10 | 默认状态栏样式：视口从顶部下方 62 px 开始，状态栏条为纯色 `#161616`，无模糊；`viewport-fit=cover` 只增加 34 px 底部安全区 | 3 | 真机实测，A（几何）+ S（像素） | N25 到 N29、N62 | 补充条件 | 行为有文档记载；未找到公开的 18.x 数值 |
| 10c | 状态栏条颜色：页面 `theme-color` meta 优先于 manifest `theme_color`；manifest 作为后备 | 3 | 真机实测，S+O | N64 到 N65-a | 补充条件（两条主题色行） | 我们读过的来源都没写明优先级；不作为新发现 |
| 11 | `black-translucent` 加 `viewport-fit=cover` 使页面延伸到状态栏下方：视口 402 × 874，顶部安全区 62 px | 3 | 真机实测，A（外观另有 O） | N55 | 一致 | 文档记载 |
| 12 | `setAppBadge(3)` 在图标上显示「3」；清除角标只有操作员口述 | 3 | 真机实测，S（清除为 O，不发布） | N60 | 一致 | 文档记载 |
| 13 | 划掉应用后，上一个文档约 6 秒后仍存活，能被 `clients.matchAll()` 找到 | 3 | 真机实测，A | N16、N38、N40 | 无（没有对应支持行） | 未核查；需要更多运行才能下一般性结论 |
| 14 | 在此版本上不存在 `BeforeInstallPromptEvent` 和 `navigator.install` | 3 | 真机实测，A | 研究报告 §T9 | 一致（BCD：不支持） | 文档记载 |
| 15 | BCD：iOS Safari `notificationclick_event` 不支持 | 1 | 文档记载（BCD） | 不适用 | （该行来源） | 不适用 |
| 15b | WebKit：Web 应用添加时会复制 Cookie（Safari 17.2） | 3 | 文档记载（WebKit [R5]） | 不适用 | 不适用 | 不适用 |
| 16 | `/demo/push/` 上的推送权限演示 | 2 | 演示可见 | 不适用 | 不适用 | 不适用 |
| X1 | 「状态栏是蓝色的／跟随页面顶部颜色」 | 不适用 | **已撤回**（N46） | N46 | 请勿引用 | 不适用 |
| X2 | 「theme-color 对状态栏没有作用」以及「应用使用 manifest 的 `theme_color`」 | 不适用 | **已被推翻**（N65、N65-a） | N65 | 请勿引用 | 不适用 |

这张表说明了三件事。第一，这项研究的每个结果都是第 3 层记录，其中就我们所查只有两项是新发现（7 和 9b）。其余结果的价值在于：它们带日期，在指定版本号上实测，可以作为条件复用到支持行上。第二，撤回本身也是记录的一部分：状态栏颜色来源这个问题先后有过两次错误读数，直到三应用测试才定论；本框架把这些读数作为「请勿引用」保留下来，而不是删掉。第三，同一个特性可以同时出现在三层（第 6、15、16 行），同一种行为也可以既有文档记载又有真机实测（第 5 行和第 15b 行），各自按实际情况标注。

## 8. 研究议程

- **每个版本都实测。** 每个 iOS 与 Safari 小版本发布后重跑核心测试，每个版本约一小时，每个行为新增一行带日期的结果。修复版本只重跑发布说明提到的相关测试。
- **iOS 27 同机复测。** 第二项研究：同一台 iPhone 从 18.6.2 升级，使用同样的已安装主屏应用和同样的 v1 测试套件字节。每个行为都得到一次跨越同一干预（升级）的前后对比（时间和其他设备状态也会变化，研究会尽量记录）。它能回答全新设备回答不了的问题：已有应用升级后是否保留存储、Cookie、权限和推送订阅；升级前添加的无 manifest 图标，启动默认方式是否改变；状态栏优先级是否依旧。
- **18.6.2 留下的缺口。** 没有窗口时的 `clients.openWindow()` 路径；Cookie 复制的时机（添加时还是首次启动时）；清除角标（18.6.2 研究中只有 O）；根作用域 worker 下的声明式 Web 推送，这需要一个单独的源。
- **其他平台。** Android Chrome 与 Samsung Internet（安装提示、`navigator.install`、分享目标），桌面 Chromium（文件处理、启动处理），Mozilla 有文档说明安装入口的 Firefox 场景，iPadOS（多任务窗口、添加面板）。
- **独立复现。** 提供一种结果格式，让其他人提交运行结果，标为社区结果，与操作员运行分开展示。
- **评估框架本身。** 统计一年里有多少支持行获得「补充条件」或「不符」关系，以及后来的版本推翻早先实测的频率。如果这些关系始终很少，本框架就是额外负担；如果很常见，那么只看支持层，就会以同样的比例被误导。

## 9. 与已有工作的关系

本框架的每个要素在别处都已存在。以下来源于 2026-10-20 阅读；只能靠 JavaScript 渲染的页面，改为阅读其仓库或数据文件。

### 9.1 按领域梳理已有工作

**兼容数据。** caniuse 为每个浏览器版本给出一个取值（`y`、表示部分支持的 `a`、`n`、`u`、`p`、`x`、`d`），附编号注释和已知 bug；它的贡献指南把附上测试用例链接列为优质新特性 PR 的标准之一 [R10]。它的测试套件检查的是「basic support」，并提醒「test may pass but support is actually buggy」[R11]。BCD 的支持声明包含 `version_added`（一个版本、`false`、`"preview"` 或区间值 `"≤"`）、`flags`、`prefix`、`partial_implementation` 和 `notes` [R12, R13]。BCD 还允许为「a contextual support condition that is not readily feature detectable」设立行为子特性，并且已经记录了已安装场景的差异：Screen Wake Lock 在 iOS Safari 上 从 16.4 起、到 18.4 之前为 `partial_implementation`，注释写着「Does not work in standalone Home Screen Web Apps」[R14]。BCD 的更新借助 mdn-bcd-collector 完成，它根据 Web IDL 与 CSS 定义生成功能检测，作为页面在浏览器里运行，也可以通过 Selenium 交给云端浏览器服务运行 [R15]。所以支持层已经带有场景信息，形式是挂在版本范围上的注释和子特性；它没有的是这些注释的测试日期、系统版本号、设备、原始数据和复测计划。

**一致性测试与互操作测试。** web-platform-tests 与 wpt.fyi 在主流桌面浏览器上运行规范测试套件，Interop 每年为选定的重点领域打分；在 Interop 2026 中，移动端测试只是调查领域，不计分，Mozilla 的发布文章也指出，浏览器可能在得分很好的同时「having inconsistent behavior」[R16, R17]。这些描述都没有涉及主屏启动、状态栏、图标或权限提示。测试领域的文献划出了同一条线。ISO/IEC 9646 把一致性测试定义为依据标准的要求测试实现[R31]；ETSI 把它与互操作测试区分开，并指出「items passing conformance testing may still not interoperate」[R32]。W3C QA Framework 说出了为什么需要第三类证据：规范中存在「discretionary items」，即留给用户代理自行决定的行为 [R33]。第 3 层在 iOS 上记录的内容（状态栏颜色、图标选择、Cookie 复制、启动默认方式）大多属于这一类。

**支持情况汇总与发布跟踪。** Baseline（W3C WebDX 社区组的 web-features 项目）依据 BCD 把特性标为 Limited、Newly available 或 Widely available，并排除部分实现 [R18]。webstatus.dev 合并了 BCD、WPT 和 web-features [R19]。Chrome Platform Status 跟踪 Blink 的特性发布 [R20]。WebKit 的特性状态页已经停用；Safari 发布说明仍是厂商的正式记录，其中有「Home Screen Web Apps」小节 [R21]。在本框架中，它们都是第 1 层来源。

**演示与从业者笔记。** whatpwacando.today 提供四十多个在线演示，并显示访问者设备支持哪些特性 [R22]；它是最典型的第 2 层资源，不发布带日期的结果。Maximiliano Firtman 的 iOS PWA 笔记在内容上最接近第 3 层：它按特性区分已安装应用与 Safari 标签页，并记录诸如「`apple-touch-icon` overrides manifest icons」这样的优先级规则 [R8]。其证据是作者私下的测试，方法、设备和原始数据均未公开。

**场景维度与带日期的真实客户端测试。** caniwebview（W3C WebView 社区组）把 WebView 作为一个兼容场景，数据来自 BCD 和手写的特殊情况说明 [R34]。Steiner（2018）比较了 PWA 特性在 WebView 与浏览器中的暴露情况[R28]。caniemail 是方法上最有力的先例：每个特性记录 `last_test_date`、`test_url` 和 `test_results_url`，支持情况按客户端和平台拆分，每一项以客户端版本（如 Apple Mail 12.4）或测试年月（如 Gmail 2019-02）为键 [R35]。它测试的是邮件客户端而不是浏览器；在我们读过的文件中，它不记录系统版本号或哈希值。

**学术研究与大规模测量。** WebDiff、CrossCheck 和 X-PERT 检测桌面浏览器之间的渲染与行为差异 [R25, R27, R26]，Mesbah 与 Prasad 的工作也是如此 [R24]。早期 PWA 论文评估了它作为跨平台开发方案的可行性 [R29, R30]；Web Almanac 测量网站如何使用 PWA 特性 [R23]；也有研究考察 Web 上的特性使用情况 [R39]。我们没有找到公开发布了数据的、关于 iOS 主屏 Web 应用行为的实证研究。按证据强度为结论分级在其他领域是常规做法，比如医学中的 GRADE [R36] 和软件工程系统综述中的证据强度评估 [R37]；本框架借用了这一思路。

### 9.2 哪些是新的，哪些不是

| 要素 | 最接近的已有工作 | 我们的判断 |
|---|---|---|
| 记录支持情况因场景而异（已安装应用与标签页、WebView 与浏览器） | BCD 注释与场景子特性 [R13, R14]；caniuse 注释；caniwebview [R34]；firt.dev [R8]；Steiner [R28] | **已有。**不主张。 |
| (a) 把已安装应用与设备场景下的行为作为独立的一层，配有自己的证据类别，而不是挂在支持声明上的一条注释 | 同上，行为以注释、子特性或无法审查的表格形式出现 | **部分新。**内容早已存在；把它单独作为一层、配上自己的证据要求，就我们所查是新的。 |
| (b) 每条结论明确标注文档记载／演示可见／真机实测 | GRADE [R36]；软件工程证据分级 [R37]；caniuse 的 `u` 与测试链接 [R10] | **在 Web 兼容领域是新的，思路借自其他领域。** |
| (c) 以带日期、精确到系统版本号、带哈希值的设备结果，以关系（一致、补充条件、不符）回填支持行 | caniemail 带日期的测试 [R35]；mdn-bcd-results 的采集器原始输出 [R15]；BCD 链接到 bug 的注释 | **部分新。**带日期的真实客户端测试在 caniemail 中已有；精确到版本号、包含设备与安装场景、带哈希值的原始数据，以及浏览器支持表上的三种关系，在我们读过的来源中都没有出现。 |
| (d) 跨系统升级的同机前后对照研究 | 一般意义上的前后重复测量与回归测试；零散的论坛升级回归报告 | **部分新。**设计本身是教科书式的；没有找到公开、可复现的 Web 应用行为前后对照数据集。说法是「就我们所知首个公开发布」，不是新方法。 |
| 区分一致性与特定场景下的行为 | ISO/IEC 9646 [R31]、ETSI [R32]、W3C QA Framework 的 discretionary items [R33] | **已有。**本框架以此为基础。 |

总之，OpenPWA 把这个领域已经非正式使用的一种结构正式化并加以命名。贡献在于：这个结构是明确的，逐条结论分级，在系统版本号层面区分场景，并且可以依据公开数据审查。如果有更早的来源同时做到了这四点，欢迎告知，我们会在下一个版本中引用。

## 10. 如何采用与引用

**许可。** 本文以知识共享署名 4.0 国际许可协议（CC BY 4.0）发布：任何人都可以复制、翻译、改编或扩展，包括商业用途，只需署名。把本框架当作方法来使用不需要任何许可；我们希望采用者引用它。

**引用格式。**

> OpenPWA Editorial Team. *The OpenPWA Evidence Layers: support, capability and behaviour as separate claims about web platform features.* Version 1.0, 2026-10-20. openpwa.net. [https://openpwa.net/about/evidence/v1.0/](https://openpwa.net/about/evidence/v1.0/)

中文引用可写作：OpenPWA 编辑团队.《OpenPWA 证据分层：把 Web 平台特性的「支持」「能力」「行为」当作三类不同的结论》. 版本 1.0, 2026-10-20. [https://openpwa.net/zh/about/evidence/v1.0/](https://openpwa.net/zh/about/evidence/v1.0/)

正文中的简称：「OpenPWA 证据分层 v1.0」。引用单条定义时，加上片段标识（例如 `#p8` 或 `#decision-procedure`）。

**采用方式。** 一个网站或数据集采用本框架，需要为每条结论标注层级和证据类别，公布它所采用的「真机实测」要求（至少包括 3.1 的要求），并写明所依据的版本。不必使用 OpenPWA 的标签、数据模型或测试套件。

**版本规则。** 主版本号变化表示增加、删除或重新定义某个层级、证据类别或原则；次版本号变化表示增加原则、边界情形或展示规则；修订号变化只修改措辞。每个已发布版本都保留固定网址（`/about/evidence/v<主>.<次>/`），变更历史只追加。

## 11. 术语表

- **结论**：关于某个 Web 平台特性、读者可以据以行动的一条陈述。
- **层级**：结论回答的问题类型：支持（第 1 层）、能力（第 2 层）、行为（第 3 层）。
- **证据类别**：支撑结论的依据：文档记载、演示可见、真机实测。
- **场景**：行为结论的条件：设备、系统版本号、启动场景（标签页、主屏应用）、状态（全新、添加后、再次启动后、划掉后）。
- **运行**：在一台设备、一个版本号上，于一个日期执行一次测试流程。
- **测试套件**（harness）：一次运行所加载的测试页面与应用的集合，有版本号和哈希值。
- **测试流程**：一项测试公开的步骤、记录字段与环境信息。
- **置信标签**：A（仪器读数）、S（截图或录屏）、O（观察者口述）。
- **关系**：实测结果与支持行的关系：一致、补充条件、不符。
- **回填**：把带日期的实测结果作为关系和条件挂到支持行上。
- **复现**：证实已有公开描述的实测结果。
- **同机研究**：在同一台实体设备上、跨一次系统升级、使用同样的已安装应用和测试套件字节所做的前后对比。

## 参考文献

所有网址访问于 2026-10-20。编号与英文版一致；条目标题保留原文。「仓库阅读」表示该页面依赖 JavaScript 渲染，改为阅读其源数据。

**研究与本站**

- [S1] OpenPWA Editorial Team. "Home Screen web apps on iOS 18.6.2: an instrumented single-device study of display mode, storage, status bar and notification behaviour." Version 1, 2026-10-20. 数据：[https://openpwa.net/research/2026-10-ios18-home-screen-web-apps/data/](https://openpwa.net/research/2026-10-ios18-home-screen-web-apps/data/)。引用字符串：OpenPWA device test, 2026-10-20, iPhone 16 Pro, iOS 18.6.2 (22G100)。
- [S2] OpenPWA. 方法论。[https://openpwa.net/zh/about/methodology/](https://openpwa.net/zh/about/methodology/)

**厂商文档与兼容数据**

- [R1] mdn/browser-compat-data. `api/ServiceWorkerGlobalScope.json`, `notificationclick_event`. [https://github.com/mdn/browser-compat-data/blob/main/api/ServiceWorkerGlobalScope.json](https://github.com/mdn/browser-compat-data/blob/main/api/ServiceWorkerGlobalScope.json)
- [R2] mdn/browser-compat-data issue #22959（2024-04-29 提交）. [https://github.com/mdn/browser-compat-data/issues/22959](https://github.com/mdn/browser-compat-data/issues/22959)
- [R3] mdn/browser-compat-data. `html/elements/meta.json`, `name.theme-color`. [https://github.com/mdn/browser-compat-data/blob/main/html/elements/meta.json](https://github.com/mdn/browser-compat-data/blob/main/html/elements/meta.json)
- [R4] mdn/browser-compat-data. `manifests/webapp/theme_color.json`. [https://github.com/mdn/browser-compat-data/blob/main/manifests/webapp/theme_color.json](https://github.com/mdn/browser-compat-data/blob/main/manifests/webapp/theme_color.json)
- [R5] WebKit. "WebKit Features in Safari 17.2." 2023-12-11. [https://webkit.org/blog/14787/webkit-features-in-safari-17-2/](https://webkit.org/blog/14787/webkit-features-in-safari-17-2/)
- [R6] WebKit. "WebKit Features in Safari 26.0." 2025-09-15. [https://webkit.org/blog/17333/webkit-features-in-safari-26-0/](https://webkit.org/blog/17333/webkit-features-in-safari-26-0/)
- [R7] WebKit. "Meet Declarative Web Push." 2025-03-27. [https://webkit.org/blog/16535/meet-declarative-web-push/](https://webkit.org/blog/16535/meet-declarative-web-push/)
- [R8] M. Firtman. "iOS PWA Compatibility." firt.dev，2026-10-13 更新。[https://firt.dev/notes/pwa-ios/](https://firt.dev/notes/pwa-ios/)
- [R9] WebKit Bugzilla. Bug 268797. [https://bugs.webkit.org/show_bug.cgi?id=268797](https://bugs.webkit.org/show_bug.cgi?id=268797)
- [R10] caniuse. [https://caniuse.com](https://caniuse.com)；数据格式与贡献规则：[https://github.com/Fyrd/caniuse/blob/main/CONTRIBUTING.md](https://github.com/Fyrd/caniuse/blob/main/CONTRIBUTING.md)
- [R11] caniuse tests. [https://tests.caniuse.com/](https://tests.caniuse.com/)
- [R12] mdn/browser-compat-data. Data guidelines. [https://github.com/mdn/browser-compat-data/blob/main/docs/data-guidelines/README.md](https://github.com/mdn/browser-compat-data/blob/main/docs/data-guidelines/README.md)
- [R13] mdn/browser-compat-data. Compat data schema. [https://github.com/mdn/browser-compat-data/blob/main/schemas/compat-data-schema.md](https://github.com/mdn/browser-compat-data/blob/main/schemas/compat-data-schema.md)
- [R14] mdn/browser-compat-data. `api/WakeLock.json`. [https://github.com/mdn/browser-compat-data/blob/main/api/WakeLock.json](https://github.com/mdn/browser-compat-data/blob/main/api/WakeLock.json)
- [R15] Open Web Docs. mdn-bcd-collector. [https://github.com/openwebdocs/mdn-bcd-collector](https://github.com/openwebdocs/mdn-bcd-collector)；结果：[https://github.com/openwebdocs/mdn-bcd-results](https://github.com/openwebdocs/mdn-bcd-results)
- [R16] web-platform-tests. "About wpt.fyi." [https://wpt.fyi/about](https://wpt.fyi/about)
- [R17] Interop 2026 看板 [https://wpt.fyi/interop-2026](https://wpt.fyi/interop-2026)（仓库阅读：[https://github.com/web-platform-tests/interop](https://github.com/web-platform-tests/interop)）；Mozilla Hacks, "Launching Interop 2026," 2026-02-12, [https://hacks.mozilla.org/2026/02/launching-interop-2026/](https://hacks.mozilla.org/2026/02/launching-interop-2026/)
- [R18] W3C WebDX Community Group. web-features, Baseline 定义。[https://github.com/web-platform-dx/web-features/blob/main/docs/baseline.md](https://github.com/web-platform-dx/web-features/blob/main/docs/baseline.md)；[https://web.dev/baseline](https://web.dev/baseline)
- [R19] webstatus.dev. [https://webstatus.dev](https://webstatus.dev)（仓库阅读：[https://github.com/GoogleChrome/webstatus.dev](https://github.com/GoogleChrome/webstatus.dev)）
- [R20] Chrome Platform Status. [https://chromestatus.com](https://chromestatus.com)（仓库阅读：[https://github.com/GoogleChrome/chromium-dashboard](https://github.com/GoogleChrome/chromium-dashboard)）
- [R21] WebKit Feature Status（已停用）. [https://webkit.org/status/](https://webkit.org/status/)；Apple, Safari release notes, [https://developer.apple.com/documentation/safari-release-notes](https://developer.apple.com/documentation/safari-release-notes)
- [R22] whatpwacando.today. [https://whatpwacando.today/](https://whatpwacando.today/)
- [R23] HTTP Archive. Web Almanac 2025, "PWA" 章。[https://almanac.httparchive.org/en/2025/pwa](https://almanac.httparchive.org/en/2025/pwa)
- [R34] W3C WebView Community Group. caniwebview. [https://caniwebview.com/](https://caniwebview.com/)
- [R35] caniemail. [https://www.caniemail.com/](https://www.caniemail.com/)；特性数据：[https://github.com/hteumeuleu/caniemail](https://github.com/hteumeuleu/caniemail)
- [R38] WebKit. "WebKit Features in Safari 16.4." 2023-03-27. [https://webkit.org/blog/13966/webkit-features-in-safari-16-4/](https://webkit.org/blog/13966/webkit-features-in-safari-16-4/)

**研究与标准**

- [R24] A. Mesbah, M. R. Prasad. "Automated cross-browser compatibility testing." ICSE 2011. [https://doi.org/10.1145/1985793.1985870](https://doi.org/10.1145/1985793.1985870)
- [R25] S. Roy Choudhary, H. Versee, A. Orso. "WEBDIFF: Automated identification of cross-browser issues in web applications." ICSM 2010. [https://doi.org/10.1109/ICSM.2010.5609723](https://doi.org/10.1109/ICSM.2010.5609723)
- [R26] S. Roy Choudhary, M. R. Prasad, A. Orso. "X-PERT: Accurate identification of cross-browser issues in web applications." ICSE 2013. [https://doi.org/10.1109/ICSE.2013.6606616](https://doi.org/10.1109/ICSE.2013.6606616)
- [R27] S. Roy Choudhary, M. R. Prasad, A. Orso. "CrossCheck: Combining crawling and differencing to better detect cross-browser incompatibilities in web applications." ICST 2012. [https://doi.org/10.1109/ICST.2012.97](https://doi.org/10.1109/ICST.2012.97)
- [R28] T. Steiner. "What is in a Web View? An Analysis of Progressive Web App Features When the Means of Web Access is not a Web Browser." WWW '18 Companion. [https://doi.org/10.1145/3184558.3188742](https://doi.org/10.1145/3184558.3188742)
- [R29] A. Biørn-Hansen, T. A. Majchrzak, T.-M. Grønli. "Progressive Web Apps: The Possible Web-native Unifier for Mobile Development." WEBIST 2017. [https://doi.org/10.5220/0006353703440351](https://doi.org/10.5220/0006353703440351)
- [R30] T. A. Majchrzak, A. Biørn-Hansen, T.-M. Grønli. "Progressive Web Apps: the Definite Approach to Cross-Platform Development?" HICSS 2018. [https://doi.org/10.24251/HICSS.2018.718](https://doi.org/10.24251/HICSS.2018.718)
- [R31] ISO/IEC 9646-1:1994. [https://www.iso.org/standard/17473.html](https://www.iso.org/standard/17473.html)（该页面我们的客户端无法读取；定义取自 ETSI 的引用 [R32]）
- [R32] ETSI. "Conformance and interoperability testing: a comparison." [https://docbox.etsi.org/MTS/MTS/10-PromotionalMaterial/MBS-20111118/Testing/Comparison/comparison.htm](https://docbox.etsi.org/MTS/MTS/10-PromotionalMaterial/MBS-20111118/Testing/Comparison/comparison.htm)
- [R33] W3C. "QA Framework: Specification Guidelines." W3C Recommendation, 2005-08-17. [https://www.w3.org/TR/qaframe-spec/](https://www.w3.org/TR/qaframe-spec/)
- [R36] G. H. Guyatt et al. "GRADE: an emerging consensus on rating quality of evidence and strength of recommendations." BMJ 2008. [https://doi.org/10.1136/bmj.39489.470347.AD](https://doi.org/10.1136/bmj.39489.470347.AD)
- [R37] T. Dybå, T. Dingsøyr. "Strength of evidence in systematic reviews in software engineering." ESEM
  2008. [https://doi.org/10.1145/1414004.1414034](https://doi.org/10.1145/1414004.1414034)
- [R39] P. Snyder, L. Ansari, C. Taylor, C. Kanich. "Browser Feature Usage on the Modern Web." IMC 2016. [https://doi.org/10.1145/2987443.2987466](https://doi.org/10.1145/2987443.2987466)

## 附录：命名

2026-10-20 以网页检索核查了三个候选名称，检索词为该名称加上 Web、浏览器、PWA 等语境。

| 候选 | 撞名核查 | 结论 |
|---|---|---|
| **OpenPWA Three-Layer Model（三层模型）** | Web 兼容领域未见使用。「三层」「three-tier」是展示层、应用层、数据层架构的通用叫法，单用这个词既泛又难检索。 | 可作描述性说法（「三层模型」），不宜作正式名称 |
| **Support–Capability–Behaviour（SCB）模型** | 两种拼写的完整短语均未见使用。近似措辞有澳大利亚 NDIS 的「Positive Behaviour Support Capability Framework」和行为改变领域的 COM-B 模型。缩写 SCB 已被大量占用：暹罗商业银行、渣打银行、瑞典统计局、一款特权访问产品（Shell Control Box），以及一篇题为「Secure Cloud Browser」的 IEEE 论文。 | 三个词保留作副标题；不单独使用缩写 |
| **OpenPWA Evidence Layers（OpenPWA 证据分层）** | 未见使用。「evidence layers」出现在 2026 年一篇关于安全保证的博客中，讲设计、实现、运行三类证据，属于其他领域的类似思路，不构成冲突。 | **推荐** |

**推荐「OpenPWA 证据分层」（OpenPWA Evidence Layers），副标题「支持 / 能力 / 行为」。** 名称带有平台名，便于归属和检索；它点明框架讨论的是证据，而不是层数，今后版本即使调整层数也不必改名；它也与 `/about/evidence/` 网址一致。行文中仍可非正式地称为「三层模型」。

简短标签：

| 元素 | 英文 | 中文 |
|---|---|---|
| 框架 | OpenPWA Evidence Layers | OpenPWA 证据分层 |
| 第 1 层 | Support | 支持 |
| 第 2 层 | Capability | 能力 |
| 第 3 层 | Behaviour | 行为 |
| 类别 | documented | 文档记载 |
| 类别 | demonstrated | 演示可见 |
| 类别 | measured | 真机实测 |
| 行标记 | Device-tested | 真机实测 |
| 置信标签 | A instrumented read · S screenshot or recording · O observer report | A 仪器读数 · S 截图或录屏 · O 观察者口述 |
| 关系 | agrees · adds a condition · differs | 一致 · 补充条件 · 不符 |
