行为 · 实测 2026-10-20,iPhone 16 Pro,iOS 18.6.2 (22G100) · A,仪器读数 · 与 WebKit 一致
把网站添加到 iOS 18.6.2 的主屏幕时,Safari 中的 localStorage、IndexedDB 和 Cookie 有哪些会进入新的 Web 应用?复制发生在什么时候?之后的写入会不会在 Safari 与应用之间、或同一网站的两个主屏应用之间,朝任一方向传过去?
Cookie 复制了一次,此后各应用独立保存;localStorage 和 IndexedDB 都没有复制进实验室应用。测试在 2026-10-20 完成,使用 iPhone 16 Pro、iOS 18.6.2(22G100)。
安装任何应用之前,先在 Safari 中写入两个标记。
- 在演示应用
/demo/ 中切换语言,会把 openpwa-demo-lang 存进 localStorage。Safari 标签页设为 zh(N08)。
- 在实验室页面
/lab/device-tests/ 中点按 Write marker here,会把同一个值同时写进三处,即 localStorage、IndexedDB 和 Cookie openpwa_lab_marker。值在 Safari 中以 TAB- 开头,在应用中以 APP- 开头,后面跟 UTC 时间。Cookie 由 document.cookie 设置,属性为 path=/lab/device-tests/; max-age=31536000; SameSite=Lax; Secure。Safari 写入的值是 TAB-2026-10-20T07:13:46Z(N09)。
随后在约 07:16 至 07:20 UTC 之间,从 Safari 添加了三个主屏应用,分别是演示应用(/demo/)、PWA Lab(/lab/device-tests/,带 Service Worker)和 Lab no-ATI(/lab/device-tests/t3/manifest-only/,自己的 manifest 和作用域,没有 Service Worker,在 Cookie 的 path 之内)。每一步之后,代理都通过 USB 在相应环境中读取标记。多数步骤中,「共享」和「隔离」会得到不同的值;演示应用的一步无法区分两者(N14),之后补做了能区分的检查(N16、N17)。我们在关键读数前就把 Cookie 的两种假设写进实验笔记,分别是只复制一次,或共用同一个实时 Cookie 存储(N18)。
为了判断 Cookie 复制的时间点,Lab no-ATI 添加后一直没有启动;Safari 写入新值后 7 s,才第一次启动它(N21、N22)。
先删掉之前的 PWA Lab、Lab no-ATI 和 OpenPWA 图标,以干净状态开始。测试过程中不要清除 Safari 的网站数据。
- 在 Safari 中打开
https://openpwa.net/lab/device-tests/#t6,点按 Write marker here,记下 TAB-… 值。
- 分享 → 添加到主屏幕 → 添加(PWA Lab)。再添加
https://openpwa.net/lab/device-tests/t3/manifest-only/(Lab no-ATI),先不要打开。
- 从图标打开 PWA Lab,查看 T6 标记面板。某个存储显示
null,说明没有复制进去;显示 TAB-…,说明 Safari 的值在那里。
- 在应用中点按 Write marker here(
APP-…)。切到 Safari,重新载入实验室页面。如果 Safari 三处仍是 TAB-…,说明应用的写入没有传到 Safari。
- 在 Safari 中再点一次 Write marker here(新的
TAB-…)。等至少两分钟,再第一次打开 Lab no-ATI。读到旧的 TAB-… 指向添加到主屏幕时复制,读到新值指向首次启动时复制。
- 把 Lab no-ATI 的 Cookie 和 PWA Lab 的
APP-… 对比,看同一网站的两个应用是否共用 Cookie 存储。
- 使用网页检查器时,也可以在各环境的控制台用
document.cookie 和 localStorage.getItem('openpwa-lab-marker') 读取标记。
在 iOS 18.6.2 上,localStorage 和 IndexedDB 没有复制进任何一个实验室应用,之后两个方向也都保持隔离;Cookie 则从 Safari 复制进每个应用一次,此后各自独立(A,N18 至 N22)。
| 时间(UTC) |
环境 |
localStorage |
IndexedDB |
Cookie |
笔记 |
| 07:13:46 |
Safari 写入 |
TAB-07:13:46Z |
TAB-07:13:46Z |
TAB-07:13:46Z |
N09 |
| 约 07:16 |
添加 PWA Lab 与 Lab no-ATI |
|
|
|
N11 |
| 07:34:15 |
PWA Lab 首次启动后的读取 |
null |
null |
TAB-07:13:46Z |
N18 |
| 07:37:40 |
PWA Lab 写入 |
APP-07:37:40Z |
APP-07:37:40Z |
APP-07:37:40Z |
N20 |
| 07:38:18 |
Safari 重新载入 |
TAB-07:13:46Z |
TAB-07:13:46Z |
TAB-07:13:46Z |
N19 |
| 07:45:25 |
Safari 写入 |
TAB-07:45:25Z |
TAB-07:45:25Z |
TAB-07:45:25Z |
N22 |
| 07:45:32.575 |
Lab no-ATI 首次启动 |
null |
null |
TAB-07:13:46Z |
N21 |
每个主屏应用都有自己的 Cookie 存储。Lab no-ATI 看不到 PWA Lab 的 APP-… Cookie,尽管 Cookie 的 path 覆盖两者,两者也运行在同一个 Web 应用进程里(A,N21)。
Lab no-ATI 拿到的是添加它时 Safari 持有的值,首次启动前 7 s Safari 写入的新值没有复制过来,这与「添加到主屏幕时复制」相符;时间点的判断强度为中等。
演示标记的结果一致。演示应用以英文启动,localStorage 为空,没有 Cookie(A,N13);之后 Safari 中的语言变更没有传到应用(N16),应用自己后来的写入也没有传到 Safari(N17)。N16 和 N17 中读取的一侧有仪器读数(A),另一侧依据操作员的报告(O)。
Service Worker 注册也没有传过去。演示应用只列出一个 /demo/ 注册,看不到 Safari 的实验室注册(A,N13);PWA Lab 也看不到演示应用的注册,尽管两个应用运行在同一个进程里(A,N18)。置信标签为 A。
2026-10-20,iOS 18.6.2
localStorage 和 IndexedDB 没有从 Safari 复制到主屏应用,两个方向都保持隔离。一个第一方 Cookie 被复制进每个应用一次,之后各自独立;每个主屏应用都有自己的 Cookie 存储。复制时间与「添加到主屏时复制」相符,证据强度中等(间隔 7 秒)。事先登记的预期是完全不复制,所以结果记为不符;它与 WebKit 的 Safari 17.2 文章一致。
- 日期
- 2026-10-20
- 设备
- iPhone 16 Pro
- 系统版本与构建号
- iOS 18.6.2 (22G100),正式版
- 环境
- Safari 标签页和主屏应用
- 结果
- 与预期不符
- 关键数值
localStorageCopied: falseindexedDbCopied: falsecookieCopiedOnce: truecookieCopyTiming: consistent with copy at Add to Home Screen (moderate)cookieIndependentAfterCopy: truecookieStorePerApp: true
- 可信度
- A,仪器读数
- 测试
- T6
- 实验笔记条目
- N13, N18, N19, N20, N21, N22
- 研究
- 阅读研究 · 数据包
- 测试页
- 测试页 v1
使用的测试页 v1 文件(4 个),线上字节的 SHA-256
/lab/device-tests/ 42c90845419f5ed3ad15d941bea04f649f4c5d350b1847292292fadd55871486/lab/device-tests/manifest.webmanifest cab4e60719fd1f9c84d04aada2ad6cd937f50615ce646c3ed20f14f0ca09832b/lab/device-tests/t3/manifest-only/ 1fe7e2a1d4aeb86fdf69b0f4546e28237dab65c53f2dc29a72148b99f1ec3920/lab/device-tests/t3/manifest-only/manifest.webmanifest b036cb4f6aca01703f5e4ad9ae009d623d8072378c7db3ebeb3132746d3e4f15
WebKit 的防跟踪页面说,主屏 Web 应用的网站数据与 Safari 隔离(“the website data of home screen web applications is kept isolated from Safari”,Tracking Prevention in WebKit,webkit.org),WebKit 缺陷 181849 也把这种分隔视为有意设计(Bug 181849,bugs.webkit.org)。Safari 17.2 的文章针对 iOS 17.2 的 Cookie 做了细化。用户点按「添加到主屏幕」创建 Web 应用时,Cookie 会复制过去,包括登录状态;其他本地存储都不复制;添加之后不再共享任何网站数据(WebKit Features in Safari 17.2,webkit.org)。Firtman 的笔记列出自 17.2 起「登录 Cookie 复制到已安装应用」,存储不与浏览器共享(iOS PWA Compatibility,firt.dev)。
实测与 WebKit 的 Safari 17.2 描述一致,18.6.2 的读数附有时间戳,复现了这一行为。单看防跟踪页面那句话,会漏掉一次性的 Cookie 复制,所以这两份 WebKit 资料应当一起引用。本次只检查了一种 Cookie。读数还显示,Lab no-ATI 拿到的是添加时 Safari 中的值,首次启动前 7 s Safari 刚写入的值没有复制过来(中等强度,N22,不能排除首次启动时复制了尚未写入磁盘的 Cookie 存储);同一网站的两个应用不共用 Cookie 存储,这一点两篇文章都没有写明。本次测试的已有资料核查把这一结果算作确认,不算新发现。面向开发者的隔离模型见 iOS 上主屏 Web 应用的存储隔离。
来自 iOS 18.6.2 数据包(CC BY 4.0);从第 11 步起的读数另有 .meta.json 附带文件(UTC 时间、工具哈希、所选页面)。
实验笔记 N08 至 N22 见 2026-10-ios18-baseline.md。记录见 /lab/results.json。引用时写作「OpenPWA device test, 2026-10-20, iPhone 16 Pro, iOS 18.6.2 (22G100), N21」。
这一结果支撑关于 iOS 已安装 Web 应用的 Cookie 复制与存储隔离的说法。
- 只测了一种 Cookie,属性为第一方、由
document.cookie 设置、Secure、SameSite=Lax、带 path。没有测试 HttpOnly 等由服务器设置的 Cookie、SameSite=None、会话 Cookie 和分区 Cookie。
- 没有测试 CacheStorage、源私有文件系统,也没有测试从 SFSafariViewController 或其他浏览器添加(17.2 的文章也涵盖这些情形)。
- 复制时间点的判断强度为中等。Safari 写入与首次启动之间只隔 7 s,仍有可能是首次启动时从尚未写入磁盘的 Safari Cookie 存储复制。更强的复测(添加、在 Safari 中写入新值、等至少两分钟、再启动)在 N22 中提出,没有执行。
- 演示标记在 N16 和 N17 中有一侧依据操作员的报告。
- 手机没有抹掉数据。自带独立空存储的 WebDriver 自动化会话没有用于任何存储步骤。
- 一台 iPhone 16 Pro、一个版本、一名操作员;没有在 iOS 26 及以后的版本上测试。
设备操作由 OpenPWA 的一名操作员在 iPhone 16 Pro 上完成。AI 代理会话通过 USB 读取页面状态、记录实验笔记并起草本文;自动门禁和 AI 事实核查做了检查。没有人逐篇审阅。