跳转到内容

平台 · 平台

三星 Internet 浏览器上的 PWA

发布于 更新于

三星 Internet 是 Galaxy 手机上基于 Chromium 的默认浏览器,安装 PWA 有两条路径:对任何网站都可用的手动菜单项 Add shortcut on Home screen,以及只对 manifest 请求 standalone 或 fullscreen 的网站出现的 ambient badging 加号图标。两者都来自三星自己的开发者文档;那份文档很薄,本条目只陈述其中记载的内容。

三星的文档描述的是两个相互独立的安装信号,而不是一个,另有一个面向 DeX 的桌面变体。

在 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 页面写明,浏览器会显示一个 “+” 符号表示网站可以安装,点按它会打开一个小菜单。列出的要求之一是 manifest 把 display 设为 standalone 或 fullscreen;保持默认 browser 显示的网站只有菜单项,没有徽标。Ambient badging 在三星 Internet 5.2 引入。

同一组文档指出,在 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 并不一致,整理在国内厂商浏览器兼容性矩阵中,只依据厂商文档。

规范

规范状态
无。