平台 · 平台
三星 Internet 浏览器上的 PWA
发布于 更新于
三星 Internet 是 Galaxy 手机上基于 Chromium 的默认浏览器,安装 PWA 有两条路径:对任何网站都可用的手动菜单项 Add shortcut on Home screen,以及只对 manifest 请求 standalone 或 fullscreen 的网站出现的 ambient badging 加号图标。两者都来自三星自己的开发者文档;那份文档很薄,本条目只陈述其中记载的内容。
三星的文档描述的是两个相互独立的安装信号,而不是一个,另有一个面向 DeX 的桌面变体。
从菜单手动添加
Section titled “从菜单手动添加”在 Android 版三星 Internet 中,用户打开浏览器菜单并选择 Add shortcut on Home screen(英文界面)。如果 manifest 声明了 icons 和 short_name,Progressive Web Apps 页面写明所选图标会和所选短名称一起出现在主屏幕上。Web App Manifest 支持自三星 Internet 4 起提供,Service Worker 以及 Push 与 Notification API 也是从 4 开始支持。
Ambient badging
Section titled “Ambient badging”Ambient Badging 页面写明,浏览器会显示一个 “+” 符号表示网站可以安装,点按它会打开一个小菜单。列出的要求之一是 manifest 把 display 设为 standalone 或 fullscreen;保持默认 browser 显示的网站只有菜单项,没有徽标。Ambient badging 在三星 Internet 5.2 引入。
Samsung DeX
Section titled “Samsung DeX”同一组文档指出,在 Samsung DeX 上运行的三星 Internet 中,Web 应用可以添加到桌面,这让接驳显示器的 Galaxy 设备获得窗口化启动,而不是主屏幕图块。
三星的文档没有提到 beforeinstallprompt。MDN 的兼容性数据列出三星 Internet 4.0 支持该事件,与其 Chromium 内核一致,因此为 Chrome 自定义安装按钮写的代码预期可以运行;依赖它之前先在 Galaxy 设备上测试,因为三星自己的界面无论如何都可能显示徽标。
下面的 manifest 满足徽标的要求;脚本把徽标当作无法观测的事实,转而检测已安装状态。
一份符合加号图标要求的 manifest
Section titled “一份符合加号图标要求的 manifest”对徽标来说只有 display 重要,但 short_name 和 icons 决定手动路径放到主屏幕上的是什么。
{ "name": "Field Notes", "short_name": "Notes", "start_url": "/", "display": "standalone", "icons": [{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }]}short_name 要短:三星文档把它称为主屏幕图标旁显示的标签,而 Android 启动器会截断过长的标签。
不信任 fullscreen 地检测已安装窗口
Section titled “不信任 fullscreen 地检测已安装窗口”三星没有记载任何用于询问徽标是否正在显示的 API,页面只能得知自己已经以安装状态运行。(display-mode: fullscreen) 也会匹配调用了 Fullscreen API 的普通页面,所以这里只把 standalone 算作信号。
function isRunningInstalled() { if (typeof window.matchMedia !== 'function') { return false; // 无法查询:当作普通标签页 } return window.matchMedia('(display-mode: standalone)').matches;}
if (!isRunningInstalled()) { // 指向浏览器菜单;没有文档记载的方式能从脚本打开它。 document.getElementById('install-hint').hidden = false;}为了徽标而声明 display: fullscreen 的网站在这里仍应检测 standalone:MDN 的 display-mode 页面写明,fullscreen 同样匹配由 Fullscreen API 置入全屏模式的页面。
三星给两个入口起了不同的名字,而其中只有一个由 manifest 驱动。
注册了 Service Worker 本身并不会为离线缓存任何内容;三星文档把它描述为一个可能从缓存返回响应的网络代理,离线行为只在 fetch 处理函数实现之后才出现。
国内厂商浏览器(华为、小米、OPPO、UC、QQ 浏览器)与微信内置 WebView 对安装、standalone、Service Worker 和 Web Push 的支持,与三星 Internet 并不一致,整理在国内厂商浏览器兼容性矩阵中,只依据厂商文档。
- Chrome 与 Android 上的 PWA
- 安装提示
- Service Worker 缓存策略
- 国内厂商浏览器兼容性矩阵
- Progressive Web Apps(samsunginternet.github.io)
- Ambient Badging(samsunginternet.github.io)
规范
| 规范 | 状态 |
|---|---|
| 无。 | |