华为 HarmonyOS NEXT 的 ArkWeb:不基于 Chromium 的自研内核
基本事实
- 内核来源:OpenHarmony 开源项目的 ArkWeb 组件,自研,不基于 Chromium
- 更新路径:系统 OTA,没有独立 APK 更新
- 签名:鸿蒙系统签名,和 Android 的 Platform 签名完全独立
- 支持 API:自研的
@ohos.web.webview模块,语法和 Androidandroid.webkit类似但实现不同
ArkWeb 的现状(2026)
截至 HarmonyOS NEXT 3.x 版本,ArkWeb 的 Chromium 兼容性仍在追赶中:
| 特性 | Chromium WebView | ArkWeb | 状态 |
|---|---|---|---|
:has() 伪类 | ✅ 完整支持 | ⚠️ 部分支持 | ArkWeb 可能只支持简单选择器 |
| CSS nesting | ✅ | ❌ | ArkWeb 还没实现 |
| Popover API | ✅ | ❌ | 暂不支持 |
| WebGPU | ✅ (Chromium 113+) | ❌ | 鸿蒙暂不开放 |
blob: 协议下载 | ✅ | ⚠️ 安全限制 | 鸿蒙默认拦截非 HTTPS 下载 |
Geolocation API | ✅ | ⚠️ 需要系统权限 | 鸿蒙权限体系不同 |
WebCrypto API | ✅ | ✅ 基本可用 | OK |
开发者怎么应对
检测 ArkWeb
// JS 里检测
const isHarmonyOS = navigator.userAgent.includes('HarmonyOS');
const isArkWeb = navigator.userAgent.includes('ArkWeb');
降级策略
- 优先写标准 Web API(W3C 标准),Chromium 和 ArkWeb 应该都能支持
- Chromium 特有 API 做 feature detect,不支持就降级:
if (CSS.supports(':has(div)')) {
// Chromium 新版路径
document.querySelector('.parent:has(.child)').click();
} else {
// ArkWeb 兼容路径
document.querySelector('.parent .child').parentElement.click();
}
- HarmonyOS NEXT 专有适配:如果你的 App 内嵌网页是核心场景,强烈建议单独做一套 ArkWeb 兼容测试
后端标记
如果你的 Web 服务端要识别 HarmonyOS 设备,注意 UA 字符串包含 HarmonyOS 和 ArkWeb:
Mozilla/5.0 (Linux; Android 13; HarmonyOS NEXT) AppleWebKit/537.36 ... Version/5.0 ArkWeb/500 ...
EMUI / HarmonyOS 4 及更早
这些设备仍基于 Android AOSP,WebView 策略和其他国产 Android 类似:
- 华为自带华为浏览器,WebView 走 Chrome / 华为浏览器内核
- 部分支持 GMS 的机型可以独立更新 Android System WebView
- 不支持 GMS 的机型走华为应用市场更新华为浏览器(内含 WebView 内核)