面向 HarmonyOS PC/2-in-1 的原生网页应用管理器
把任意 HTTP/HTTPS 链接整理成可独立启动、独立配置的桌面网页应用
AnyPWA 使用 ArkTS 和 ArkWeb 构建。你可以添加普通网站、PWA 入口、局域网服务或直接提供 Web App Manifest;每项配置都可以拥有自己的名称、图标、窗口模式、UA、导航范围和网页权限策略。
AnyPWA 已在华为应用市场正式上架:前往 AppGallery 获取 AnyPWA。
Important
AnyPWA 是网页应用管理器和 PWA 配置容器,不是完整的系统级 PWA 安装器。网页应用仍运行在 AnyPWA 的 ArkWeb/Bundle 中,不会变成独立 HAP。当前运行环境不支持 Service Worker,因此不提供依赖它的离线冷启动、Web Push、后台同步和缓存更新生命周期。
- 添加任意 HTTP/HTTPS 链接、域名、局域网地址或 Manifest JSON 地址。
- 搜索、编辑和删除网页应用。
- 为每个应用读取网页图标,或通过系统图片选择器设置自定义图标。
- 名称或图标发生变化时,可同步重建桌面快捷方式。
- 应用名称在主页卡片中最多显示两行,超出部分省略。
- 新建邮件、Microsoft、Google、Apple 等跨域登录服务时,自动推荐“任意匹配(任意源)”链接策略。
- 帮助页、FAQ、配置示例和动态使用提示内置于应用。
- 主页右下角可选择跟随系统、浅色、深色或强制深色主题;选择会持久保存,并同步传递给网页。普通深色尊重
prefers-color-scheme,强制深色则会请求 ArkWeb 转换未适配网页。
- 每次启动都创建独立的多实例
UIAbility窗口,多个网页应用可以同时运行。 - 桌面快捷方式冷启动或热启动时直接进入目标网页应用,不经过管理主页。
- 默认使用非沉浸式窗口并隐藏 AnyPWA 链接状态栏,只保留系统原生标题栏。
- 可为每个应用启用纯网页沉浸模式,或在非沉浸模式下重新显示返回、加载状态和 URL。
target="_blank"和window.open()会创建新的受管网页窗口,不覆盖原窗口。- 网页媒体全屏时隐藏应用内工具栏;返回操作优先退出网页全屏。
- PC/2-in-1 窗口会使用应用级名称和图标;系统支持 Desktop Extension Kit 时,同一网页应用的多个窗口会归入同一个快捷栏分组,不同网页应用仍保持独立。能力不可用时自动回退到系统默认分组。
主动点击“检测 PWA”时,AnyPWA 按以下顺序发现配置:
- 使用当前应用 UA 和已有 Cookie 请求静态 HTML,读取
<link rel="manifest">。 - 静态页面未声明 Manifest 时,在受限临时 ArkWeb 中加载页面并读取渲染后的 DOM。
- 对少数已验证站点使用精确主机兼容规则,例如 Outlook。
- 用户仍可把
.json或.webmanifest地址直接粘贴到链接框中。
动态检测窗口会拒绝设备权限、文件选择、HTTP 身份验证、JavaScript 弹窗和新窗口请求,并允许随时取消。检测与应用运行使用同一种 PC、手机或 HarmonyOS UA,避免因站点返回不同页面而误判。
已处理的 Manifest 成员包括:
name、short_name、description、idstart_url、scopedisplay、display_override、orientationtheme_color、background_coloricons、screenshots、categoriesshortcutsprotocol_handlers、file_handlers、share_targetlaunch_handler、handle_links
相对 URL 以 Manifest URL 为基准解析;start_url: "." 会落在 Manifest 所在目录。跨源 start_url、scope 和 id 会按安全回退规则处理,Manifest JSON 本身不会被误存为应用启动页。
每个应用可以选择:
| 模式 | 行为 |
|---|---|
| 精确匹配 | PWA 遵守 Manifest scope;普通网页严格匹配协议、主机和端口,范围外链接交给系统浏览器 |
| 自定义匹配 | 完整 URL 包含指定文字时留在 ArkWeb,忽略大小写 |
| 任意匹配 | 所有 HTTP/HTTPS 跳转都留在应用窗口,适合 Google、Microsoft 等跨域登录流程 |
AnyPWA 会为每个网页应用归档其访问来源和 Session Cookie,并在重新打开窗口前恢复会话。任意匹配模式下,该应用内部访问过的来源会被归入同一个会话档案。
受 ArkWeb API 限制,这不是 Chromium 风格的完整 Profile 隔离:持久 Cookie、DOM Storage、IndexedDB、缓存等仍可能在同一 AnyPWA Bundle 的相同来源之间共享。
以下能力可以按应用开关:
- 系统剪贴板读取与写入
- 相机和麦克风
- 位置
- 运动与方向传感器
- 屏幕共享
- 文件/文件夹选择与上传
- 文件下载
敏感能力还会按“网页应用 + origin + 能力”向用户确认,可仅允许当前窗口或长期允许,并可从应用菜单重置。非安全网页来源不会获得设备权限。
navigator.clipboard.readText() 和 writeText() 通过原生桥连接 HarmonyOS 系统剪贴板;富文本 read()/write() 保留 ArkWeb 原生行为。系统剪贴板读取需要 ohos.permission.READ_PASTEBOARD ACL。
| 项目 | 当前状态 |
|---|---|
| 设备 | HarmonyOS PC/2-in-1 |
| 最低系统 API | API 23;API 23 上桌面图标的查询、自动更新和移除需手动完成 |
| 默认网页 UA | PC |
| 普通 HTTP/HTTPS 网站 | 支持 |
| Web App Manifest | 支持读取和应用主要配置 |
| 多窗口 | 支持,同一应用也可打开多个窗口 |
| 桌面快捷方式 | 支持,使用 AppGallery Kit Pin Shortcut 并由系统确认 |
| Service Worker | 当前 ArkWeb 环境不可用 |
| 离线 PWA / Web Push / 后台同步 | 不支持 |
| 独立 HAP、独立 Bundle 或独立系统权限 | 不支持,所有网页应用仍属于 AnyPWA |
| 系统级动态协议/文件/分享处理器注册 | 不支持;协议处理目前只覆盖应用内导航 |
- 点击主页右上角“+”。
- 输入正常访问入口,例如
https://github.com/。 - 选择 PC、手机或 HarmonyOS 网页标识。
- 点击“检测 PWA”。
- 检查名称、启动地址、scope、显示模式和图标后保存。
- 先按正常网址创建应用。
- 把“应用内链接匹配”设置为“任意匹配”。
- 打开应用并完成 Google、Microsoft 等跨域登录。
- 返回管理页再次编辑并检测;AnyPWA 会复用已有网页登录状态。
- 个人 Microsoft 账户入口:
https://outlook.live.com/mail/ - 工作或学校账户入口:
https://outlook.office.com/mail/
Outlook 的初始 HTML 通常不直接声明 Manifest。AnyPWA 会尝试动态检测和精确兼容路径。若站点以后调整,可手动输入:
- 个人账户:
https://outlook.live.com/mail/manifests/pwa.json - 工作或学校账户:
https://outlook.office.com/mail/manifests/pwa.json
更多步骤见应用内“配置示例”和上架与签名手册。
- 支持 HarmonyOS API 24 或更高 SDK 的 DevEco Studio
- 工程 Hvigor 开发态配置版本
6.1.1 - Node.js(DevEco Studio 已自带)
- HarmonyOS PC/2-in-1 设备或模拟器
- 与
com.anypwa.shwstone匹配的调试/发布签名
当前工程可使用 DevEco Studio 配套的 API 26 SDK 编译,targetSdkVersion 为 API 24,
compatibleSdkVersion 为 API 23。API 23 支持创建桌面图标;查询、自动更新和移除桌面图标使用 API 24
接口,因此在 API 23 上会显示明确的手动操作提示。
使用 DevEco Studio 打开项目后同步依赖,或在配置好 OHPM 的终端中运行:
ohpm install根目录的真实 build-profile.json5、证书、Profile 和密码不会进入 Git。首次检出后:
- 将
build-profile.template.json5复制为build-profile.json5。 - 在 DevEco Studio 的 File > Project Structure > Project > Signing Configs 中配置签名。
- 确认签名 Profile 的 Bundle 为
com.anypwa.shwstone。
项目声明了受限权限 ohos.permission.READ_PASTEBOARD。要安装原始配置构建的 HAP,调试或发布 Profile 必须已经获批该 ACL,否则安装会报:
9568289 / install failed due to grant request permissions failed
PermissionName: ohos.permission.READ_PASTEBOARD
完整流程见签名与上架操作手册。请勿提交 .p12、.cer、.p7b、密码或可复用签名材料。
DEVECO_SDK_HOME=/Applications/DevEco-Studio.app/Contents/sdk \
/Applications/DevEco-Studio.app/Contents/tools/hvigor/bin/hvigorw \
--no-daemon --mode module -p product=default assembleHap输出文件:
entry/build/default/outputs/default/AnyPWA.hap
/Applications/DevEco-Studio.app/Contents/tools/node/bin/node \
scripts/verify-package.mjs \
entry/build/default/outputs/default/AnyPWA.hap校验器会读取最终包内清单,检查版本、Bundle、权限、设备类型和构建模式。它不能替代 AGC 签名、兼容性、隐私或上架校验。
编译包含 Manifest、scope、origin、动态检测解析、窗口默认值和安全上下文断言的测试 HAP:
DEVECO_SDK_HOME=/Applications/DevEco-Studio.app/Contents/sdk \
/Applications/DevEco-Studio.app/Contents/tools/hvigor/bin/hvigorw \
--no-daemon --mode module -p module=entry@ohosTest assembleHap运行 GitHub PWA 在线契约测试:
node scripts/test-github-pwa.mjs动态 ArkWeb、窗口管理、桌面快捷方式、剪贴板、权限、登录和文件能力必须在 HarmonyOS PC/2-in-1 上验证;编译成功不代表这些运行时能力已端到端通过。
AnyPWA/
├── AppScope/ # Bundle、版本和全局图标
├── entry/src/main/ets/
│ ├── entryability/ # 管理窗口与网页多实例窗口 Ability
│ ├── model/ # 应用、Manifest、能力模型
│ ├── pages/ # 管理主页、浏览器、帮助和配置教程
│ ├── services/ # 存储、Manifest、快捷方式、剪贴板等服务
│ └── utils/ # URL、scope、UA、Cookie 和匹配规则
├── entry/src/test/ # ArkTS 单元断言
├── design/ # AnyPWA 图标源文件
├── docs/ # PWA 计划与发布文档
├── scripts/ # 包校验和在线契约测试
├── CHANGELOG.md # 版本变更记录
├── LICENSE # Apache License 2.0
└── THIRD_PARTY_NOTICES.md # 第三方材料归属
面向普通用户的正式版本通过华为应用市场分发:
GitHub v1.2.0 Release 提供对应版本的源码归档和变更说明,不提供可直接安装的 HAP。HarmonyOS 应用需要与设备及授权能力匹配的签名,开发者也可以使用自己的证书和包含 ohos.permission.READ_PASTEBOARD ACL 的 Profile 从源码构建。
- 当前 ArkWeb 环境不提供 Service Worker API。
- 网页应用不是独立 Bundle,窗口分组、卸载、系统权限和数据 Profile 仍属于 AnyPWA。
- ArkWeb 没有公开按 Web 组件动态创建独立持久化 Profile 的 API,相同来源的数据可能共享。
- OAuth、支付或会议页面若依赖特殊
window.opener、DRM、企业策略或浏览器扩展,可能无法完全兼容。 - 桌面快捷方式依赖 AppGallery Kit、系统服务、网络/时间环境和用户确认。
- Manifest 扩展成员可以被识别,但不等于 HarmonyOS 已注册对应的系统级处理能力。
更完整的能力评估与后续方向见 PWA_SUPPORT_PLAN.md。
欢迎提交 Issue 和 Pull Request。提交前建议:
- 说明目标 HarmonyOS/API/设备环境。
- 对 Manifest、URL、scope、UA 或存储逻辑补充可复现样例和测试。
- 至少完成主 HAP 与测试 HAP 编译。
- 不提交签名、ACL Profile、账号 Cookie、私钥、密码或用户网站数据。
- 明确区分“静态检查/编译通过”和“已在真实 HarmonyOS 设备验证”。
除非另有明确说明,向本仓库提交的贡献将按 Apache License 2.0 授权。
AnyPWA 自有代码和资源采用 Apache License 2.0 开源。该协议允许使用、修改和再分发,并包含明确的专利授权条款;分发时须遵守许可证中的保留声明等条件。
项目包含的 Font Awesome Free circle-question SVG 采用 CC BY 4.0,归属与修改说明见 THIRD_PARTY_NOTICES.md。
Copyright 2026 ShwStone.