📑往期推文全新看点(文中附带最新·鸿蒙全栈学习笔记)
✒️ 鸿蒙(HarmonyOS)北向开发知识点记录~
✒️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
✒️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?
✒️ 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~
✒️ 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?
✒️ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?
✒️ 记录一场鸿蒙开发岗位面试经历~
✒️ 持续更新中……
Web组件渲染模式
Web组件支持两种渲染模式。
异步渲染模式(默认)
renderMode: RenderMode.ASYNC_RENDER
异步渲染模式下,Web组件作为图形surface节点,独立送显。建议在仅由Web组件构成的应用页面中使用此模式,有更好的性能和更低的功耗表现。
同步渲染模式
renderMode: RenderMode.SYNC_RENDER
同步渲染模式下,Web组件作为图形canvas节点,Web渲染跟随系统组件一起送显。可以渲染更长Web组件内容,但会消耗更多的性能资源。
说明
接口枚举值定义请查看 RenderMode枚举说明 。
规格与约束
异步渲染模式
- Web组件的宽高最大规格不超过7,680px(物理像素),超过则会导致白屏。
- 不支持动态切换模式。
同步渲染模式
- Web组件的宽高最大规格不超过500,000px(物理像素),超过则会导致白屏。
- 不支持DSS合成。
- 不支持动态切换模式。
使用场景
// renderMode.ets
import { webview } from '@kit.ArkWeb';
@Entry
@Component
struct WebHeightPage {
private webviewController: WebviewController = new webview.WebviewController()
build() {
Column() {
Web({
src: "https://www.example.com/",
controller: this.webviewController,
renderMode: RenderMode.ASYNC_RENDER // 设置渲染模式
})
}
}
}
Web组件大小自适应页面内容布局
使用Web组件大小自适应页面内容布局模式layoutMode(WebLayoutMode.FIT_CONTENT)时,能使Web组件的大小根据页面内容自适应变化。
适用于Web组件需要根据网页高度撑开,与其他原生组件一起滚动的场景,如:
- 浏览长文章。Web组件同一布局层级有其他原生组件,如评论区、工具栏等。
- 长页面首页。Web组件同一布局层级有其他原生组件,如宫格菜单。
规格与约束
- 建议配置 渲染模式 为同步渲染模式,避免因为组件大小超出限制导致异常场景(白屏,布局错误)。
- 建议配置 过滚动模式 为关闭状态。当过滚动模式开启时,当用户在Web界面上滑动到边缘时,Web会通过弹性动画弹回界面,会与Scroll组件的回弹相互冲突,影响体验。
- 键盘避让 属性配置为RESIZE_CONTENT时,该避让模式不生效。
- 不支持对页面进行缩放。
- 不支持通过Web组件的height属性修改组件高度。
- 仅支持根据页面内容自适应组件高度,不支持自适应宽度。
使用场景
// fit_content_test.ets
import { webview } from '@kit.ArkWeb';
@Entry
@Component
struct WebHeightPage {
private webviewController: WebviewController = new webview.WebviewController()
private scroller: Scroller = new Scroller()
build() {
Navigation() {
Column() {
Scroll(this.scroller) {
Column() {
Web({
src: $rawfile("fit_content.html"),
controller: this.webviewController,
renderMode: RenderMode.SYNC_RENDER // 设置为同步渲染模式
})
.layoutMode(WebLayoutMode.FIT_CONTENT) // 设置为Web组件大小自适应页面内容
.overScrollMode(OverScrollMode.NEVER) // 设置过滚动模式为关闭状态
Text("评论区")
.fontSize(28)
.fontColor("#FF0F0F")
.height(100)
.width("100%")
.backgroundColor("#f89f0f")
}
}
}
}
.title("标题栏")
}
}
<!--fit_content.html-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>Fit-Content</title>
</head>
<body>
<div>
<div><h2 id="使用场景">使用场景</h2>
<p>ArkWeb(方舟Web)提供了Web组件,用于在应用程序中显示Web页面内容。常见使用场景包括:</p>
<ul>
<li><p>
应用集成Web页面:应用可以在页面中使用Web组件,嵌入Web页面内容,以降低开发成本,提升开发、运营效率。</p>
</li>
<li><p>
浏览器网页浏览场景:浏览器类应用可以使用Web组件,打开三方网页,使用无痕模式浏览Web页面,设置广告拦截等。</p>
</li>
<li><p>小程序:小程序类宿主应用可以使用Web组件,渲染小程序的页面。</p></li>
</ul>
</div>
<div><h2 id="能力范围">能力范围</h2>
<p>Web组件为开发者提供了丰富的控制Web页面能力。包括:</p>
<ul>
<li><p>Web页面加载:声明式加载Web页面和离屏加载Web页面等。</p></li>
<li><p>生命周期管理:组件生命周期状态变化,通知Web页面的加载状态变化等。</p></li>
<li><p>常用属性与事件:UserAgent管理、Cookie与存储管理、字体与深色模式管理、权限管理等。</p>
</li>
<li><p>
与应用界面交互:自定义文本选择菜单、上下文菜单、文件上传界面等与应用界面交互能力。</p>
</li>
<li><p>App通过JavaScriptProxy,与Web页面进行JavaScript交互。</p></li>
<li><p>安全与隐私:无痕浏览模式、广告拦截、坚盾守护模式等。</p></li>
<li><p>维测能力:DevTools工具调试能力,使用crashpad收集Web组件崩溃信息。
</p></li>
<li><p>
其他高阶能力:与原生组件同层渲染、Web组件的网络托管、Web组件的媒体播放托管、Web组件输入框拉起自定义输入法、等。</p>
</li>
</ul>
</div>
<div><h2 id="约束与限制">约束与限制</h2>
<ul>
<li>Web内核版本:ArkWeb基于谷歌Chromium内核开发,使用的Chromium版本为M114。</li>
</ul>
</div>
</div>
</body>
</html>