跳转到内容
WebView AllWebView All

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 作用
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 页面。

请求 支持
GET 无 headers 支持。
GET 自定义 headers 支持。
POST 无自定义 headers 支持。
POST 自定义 headers 不支持,抛 UnsupportedError。

ArkWeb postUrl 只接收 URL 和 body,不接收 headers,因此库明确失败。

OHOS 支持 camera、microphone,并扩展 midiSysex、protectedMediaId。

await (WebViewCookieManager().platform as OhosWebViewCookieManager)
.setAcceptThirdPartyCookies(
controller.platform as OhosWebViewController,
true,
);

当前支持的 ArkWeb SDK 公开接口没有明确的 WebAuthn/Passkey 启用或代理能力。 webview_all_ohos 因此不声明支持该功能,也不增加没有原生实现的 Android 式开关。 应用需要在每个目标 API 级别和设备上验证标准网页能力,保留其他认证方式; 业务必须使用 Passkey 时,应转交给已确认支持的外部浏览器。插件不注入 JS 凭据模拟。

  • WebView 权限批准不等于系统权限,宿主应用仍需声明并获取权限。
  • ArkWeb 公开宿主 API 不保证 WebAuthn/Passkey,不能只根据其浏览器引擎推断可用。
  • ArkWeb 行为可能随 HarmonyOS/OpenHarmony 版本变化,尤其是媒体、文件选择和权限。

不要在同一个 package 目录交替运行 stock Flutter 和 OHOS Flutter SDK:两者都会 写 .dart_tool/package_config.json,但 SDK package 集合不兼容。仓库脚本会 把包含未提交改动的当前代码复制到临时目录后再运行 OHOS 命令:

Terminal window
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 不会被污染。