行为 · 实测 2026-10-20,iPhone 16 Pro,iOS 18.6.2 (22G100) · A,仪器读数 · 与 BCD 一致
Chromium 系浏览器允许页面用 beforeinstallprompt 触发或推迟安装,较新的提案又增加了 navigator.install()。我们在 2026-10-20 用 iPhone 16 Pro、iOS 18.6.2(22G100)检查了安装相关 API,Safari 标签页和两个主屏 Web 应用中都没有这些接口。
iOS 上的 Safari 是否暴露可编程的安装 API(navigator.install、BeforeInstallPromptEvent 或 onbeforeinstallprompt 处理属性),或者 navigator.getInstalledRelatedApps()?在 Safari 标签页和主屏 Web 应用中各是怎样?
我们用仪器分别读取三种上下文的特性检测值。
- Safari 标签页使用 WebDriver 自动化窗口,打开四个页面(
/lab/device-tests/、/demo/、/reference/installation/ios-add-to-home-screen/ 和 /lab/device-tests/t1/no-manifest/),实验记录 N03 与 N06;
- 从主屏幕图标打开 OpenPWA 演示应用(N13);
- 从主屏幕图标打开 PWA Lab 真机实验室测试工具(N18)。
各上下文都读取以下表达式。
'install' in navigator 与 typeof navigator.install;
'BeforeInstallPromptEvent' in window 与 'onbeforeinstallprompt' in window;
'onappinstalled' in window;
'getInstalledRelatedApps' in navigator。
演示页面还监听 beforeinstallprompt 并显示是否触发过,但没有页面尝试安装,测试只检查接口是否存在。
测试工具会直接打印这些值。因此不需要 Web 检查器。
- 在 iPhone 的 Safari 中打开
https://openpwa.net/lab/device-tests/,滚到 Results panel(T5, T9, T10),读出与安装相关的几行,或点按 Copy results as JSON。
- 点按分享,选添加到主屏幕,再点添加。从图标打开 PWA Lab,读出同样几行。
- 也可以在 Safari 和已安装的演示应用中分别打开
https://openpwa.net/demo/,查看安装状态里的「Browser offered an install prompt (beforeinstallprompt)」一行。
- 如需额外检查,可借助 Web 检查器,在两种上下文中求值
'onappinstalled' in window。
在 iOS 18.6.2(22G100)上,列出的安装 API 在标签页和两个主屏应用中都不存在(仪器读数,A;实验记录 N03、N13、N18)。'install' in navigator 为 false,typeof navigator.install 为 “undefined”,'BeforeInstallPromptEvent' in window 为 false,'onbeforeinstallprompt' in window 为 false,'getInstalledRelatedApps' in navigator 为 false。'onappinstalled' in window 在标签页中为 false(N03),在两个应用的原始读数中也为 false。演示页面在标签页和应用中对 beforeinstallprompt 显示的都是「Not fired yet」。
在这个版本的 Safari 中,安装只能由用户自己通过「分享 → 添加到主屏幕」完成。页面可以检测自己是否作为已安装应用运行(display-mode: standalone、navigator.standalone),但没有 API 可以发起或推迟安装,也没有 API 可以查询相关应用是否已安装。
2026-10-20,iOS 18.6.2
Safari 标签页和 demo 主屏应用里都没有 navigator.install、BeforeInstallPromptEvent、onbeforeinstallprompt 或 navigator.getInstalledRelatedApps。
- 日期
- 2026-10-20
- 设备
- iPhone 16 Pro
- 系统版本与构建号
- iOS 18.6.2 (22G100),正式版
- 环境
- Safari 标签页和主屏应用
- 结果
- 符合预期
- 关键数值
navigatorInstall: undefinedBeforeInstallPromptEvent: falseonbeforeinstallprompt: falsegetInstalledRelatedApps: false
- 可信度
- A,仪器读数
- 测试
- T9
- 实验笔记条目
- N03, N13
- 研究
- 阅读研究 · 数据包
- 测试页
- 测试页 v1
使用的测试页 v1 文件(1 个),线上字节的 SHA-256
/lab/device-tests/ 42c90845419f5ed3ad15d941bea04f649f4c5d350b1847292292fadd55871486
BCD 没有记录 iOS 版 Safari 对 BeforeInstallPromptEvent 的支持(BeforeInstallPromptEvent.json,github.com),它的 api.Navigator 文件中 install 与 getInstalledRelatedApps 也没有 Safari 支持(Navigator.json,github.com)。定义 navigator.install() 的 Web Install 提案是一份 WICG 草案(Web Install,wicg.github.io)。WebKit 的 iOS 16.4 文章描述的添加方式是分享菜单中的「添加到主屏幕」(Web Push for Web Apps on iOS and iPadOS,webkit.org)。
实测与这些来源一致。BCD 的 iOS 版 Safari 单元格不区分标签页和主屏应用;本次运行显示两者中都没有这些 API,所以在 18.6.2 上上下文对它们没有影响。这些读数复现了文档记载的接口缺失,属于确认结果,不算新发现。
这些值在研究的数据包中(CC BY 4.0)。标签页一侧在 raw/2026-10-20-ios18.6.2-tab-lab.json、raw/2026-10-20-ios18.6.2-tab-demo.json、raw/2026-10-20-ios18.6.2-tab-ios-a2hs.json(N03)和 raw/2026-10-20-ios18.6.2-tab-t1-no-manifest.json(N06);演示应用在 raw/2026-10-20-ios18.6.2-step09-app-demo.json(N13);PWA Lab 在 raw/2026-10-20-ios18.6.2-step12-app-lab.json(N18)。机器可读的运行记录在 /lab/results.json 中,id 为 install-apis-on-ios/2026-10-20-ios-18.6.2-22g100。
这一结果支撑 beforeinstallprompt 事件、navigator.install 和 getInstalledRelatedApps() 条目中关于 iOS 的说法,以及安装提示兼容性数据中 iOS 版 Safari 一行。
- 仅在一天内由一名操作员测试一台 iPhone 16 Pro,系统仅有 iOS 18.6.2(22G100)这一个版本。
- 测的是接口是否存在,不是行为。理论上浏览器可以派发一个没有对应处理属性的事件;除演示页面外,没有单独用监听器检查
beforeinstallprompt。
- 标签页一侧的读数来自 WebDriver 自动化窗口;特性检测与它的空数据存储无关。
- 没有测试第三方 iOS 浏览器(T5b 没有运行)。Safari 26.0 改变了添加后站点的打开方式;这次在 18.6.2 上的运行不涉及 iOS 26 及以后的版本。
- iPadOS 和其他 iOS 版本均未测试,计划等这台设备升级到 iOS 27 后重跑。
设备操作由 OpenPWA 的一名操作员在 iPhone 16 Pro 上完成。AI 代理会话通过 USB 读取页面状态、记录实验笔记并起草本文;自动门禁和 AI 事实核查做了检查。没有人逐篇审阅。