跳转到内容

iOS Safari 与主屏 Web 应用中的安装 API

发布于

行为实测 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 检查器。

  1. 在 iPhone 的 Safari 中打开 https://openpwa.net/lab/device-tests/,滚到 Results panel(T5, T9, T10),读出与安装相关的几行,或点按 Copy results as JSON。
  2. 点按分享,选添加到主屏幕,再点添加。从图标打开 PWA Lab,读出同样几行。
  3. 也可以在 Safari 和已安装的演示应用中分别打开 https://openpwa.net/demo/,查看安装状态里的「Browser offered an install prompt (beforeinstallprompt)」一行。
  4. 如需额外检查,可借助 Web 检查器,在两种上下文中求值 'onappinstalled' in window。
  • T9 iOS 上不存在的安装 API(2 分钟)
    测试页 v1:打开测试
    demo 页面:/demo/

在 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: undefined
  • BeforeInstallPromptEvent: false
  • onbeforeinstallprompt: false
  • getInstalledRelatedApps: 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 事实核查做了检查。没有人逐篇审阅。