ui.web() 可在 surface 或 page 中直接嵌入真正的 Android WebView,从而使用完整的 HTML、CSS 与 JavaScript 技术栈。适用于自定义可视化、丰富布局,或原生节点集合无法覆盖的任意交互模型。
API 签名
选项
省略
url 时,在 WebView 内渲染的完整 HTML 内容。这是完整的 HTML 文档字符串 — 请包含 <!DOCTYPE html> 与 <body>,以便在各 Android 版本上稳定渲染。要加载的 URL,用于替代内联
html 内容。以 dp 表示的显式高度。默认为
240。WebView 中默认启用的能力
每个ui.web() WebView 默认启用以下能力:
- JavaScript 执行 —
<script>标签与内联处理器可正常运行。 - DOM 存储 — 可使用
localStorage与sessionStorage。 - 网络访问 — fetch、XMLHttpRequest 与 WebSocket 可连接远程主机。
- 文件访问 — WebView 可读取本地文件系统。
- 内容访问 — Android
content://URI 可正确解析。
双向通信 — Aether.postMessage
Aether 会向每个 WebView 注入全局 Aether 对象。在 JavaScript 中调用 Aether.postMessage(jsonString) 可触发已注册的扩展 action:
action 字段指定要调用的已注册 action;args 是可选对象,会作为载荷转发给 action 处理器。
完整示例 — 带 action 桥接的 WebView
index.ts
Aether.postMessage,从而触发扩展中注册的 "web-clicked" action。Action 处理器接收 { source: "button" } 作为载荷,并显示通知 toast。
注入动态数据
由于html 是普通 JavaScript 字符串,你可以在渲染时从 storage、state 或任意 render 上下文字段插值:
render,因此 WebView 内容会与扩展的持久化 storage 保持同步。