OHOS
OHOS 由 webview_all_ohos 1.4.0 提供,底层使用 ArkWeb。
| 项 | 值 |
|---|---|
| Controller | OhosWebViewController |
| Widget | OhosWebViewWidget |
| Delegate | OhosNavigationDelegate |
| Cookie manager | OhosWebViewCookieManager |
| 引擎 | ArkWeb |
| 最低目标 | OHOS API 12+ |
final params = OhosWebViewControllerCreationParams( domStorageEnabled: true, javaScriptCanOpenWindowsAutomatically: true, supportMultipleWindows: true, loadWithOverviewMode: true, useWideViewPort: true, allowFileAccess: true, mixedContentMode: OhosMixedContentMode.neverAllow, mediaPlaybackRequiresUserGesture: false, supportZoom: true, textZoom: 100,);主要 API
Section titled “主要 API”| API | 作用 |
|---|---|
OhosWebViewController.enableDebugging |
全局启用 ArkWeb 调试。 |
webViewIdentifier |
原生 WebView 实例 ID。 |
setAllowFullScreenRotate |
控制全屏旋转。 |
setDomStorageEnabled |
控制 DOM storage。 |
setSupportMultipleWindows |
控制多窗口。 |
setLoadWithOverviewMode / setUseWideViewPort |
视口相关设置。 |
setDisplayZoomControls / setBuiltInZoomControls |
缩放控件。 |
setAllowFileAccess |
file access。 |
setMixedContentMode |
控制 HTTP/HTTPS 混合内容。 |
setOnShowFileSelector |
文件选择。 |
setGeolocationPermissionsPromptCallbacks |
定位提示。 |
setCustomWidgetCallbacks |
全屏 custom view。 |
从 1.4.4 起,HTTPS 页面默认不能加载不安全的 HTTP 资源,建议将资源地址改为 HTTPS。如果需要兼容旧网页,可在加载页面前,通过创建参数或 setMixedContentMode 显式选择 OhosMixedContentMode.compatibilityMode 或 OhosMixedContentMode.alwaysAllow。修改策略不会移除已经加载的资源,也不影响直接打开 HTTP 页面。
loadRequest
Section titled “loadRequest”| 请求 | 支持 |
|---|---|
| GET 无 headers | 支持。 |
| GET 自定义 headers | 支持。 |
| POST 无自定义 headers | 支持。 |
| POST 自定义 headers | 不支持,抛 UnsupportedError。 |
ArkWeb postUrl 只接收 URL 和 body,不接收 headers,因此库明确失败。
权限和 Cookie
Section titled “权限和 Cookie”OHOS 支持 camera、microphone,并扩展 midiSysex、protectedMediaId。
await (WebViewCookieManager().platform as OhosWebViewCookieManager) .setAcceptThirdPartyCookies( controller.platform as OhosWebViewController, true,);WebAuthn 与 Passkey
Section titled “WebAuthn 与 Passkey”当前支持的 ArkWeb SDK 公开接口没有明确的 WebAuthn/Passkey 启用或代理能力。
webview_all_ohos 因此不声明支持该功能,也不增加没有原生实现的 Android 式开关。
应用需要在每个目标 API 级别和设备上验证标准网页能力,保留其他认证方式;
业务必须使用 Passkey 时,应转交给已确认支持的外部浏览器。插件不注入 JS 凭据模拟。
- WebView 权限批准不等于系统权限,宿主应用仍需声明并获取权限。
- ArkWeb 公开宿主 API 不保证 WebAuthn/Passkey,不能只根据其浏览器引擎推断可用。
- ArkWeb 行为可能随 HarmonyOS/OpenHarmony 版本变化,尤其是媒体、文件选择和权限。
Toolchain 隔离
Section titled “Toolchain 隔离”不要在同一个 package 目录交替运行 stock Flutter 和 OHOS Flutter SDK:两者都会
写 .dart_tool/package_config.json,但 SDK package 集合不兼容。仓库脚本会
把包含未提交改动的当前代码复制到临时目录后再运行 OHOS 命令:
OHOS_FLUTTER=/absolute/path/to/ohos/flutter \ ./tool/run_ohos_flutter.sh -- analyze
OHOS_FLUTTER=/absolute/path/to/ohos/flutter \ ./tool/run_ohos_flutter.sh --workdir webview_all/example -- build hap脚本要求显式的绝对 SDK 路径,复制时排除 cache/generated 目录,结束后始终删除
临时工作区,因此真实仓库的 .dart_tool 不会被污染。