中国总决赛
全球总决赛
学习进度
完成
省赛
能力分类
主要子系统
能力模型
Web子系统的概念和架构设计,Web组件支持的能力范围

ArkWeb


使用场景

ArkWeb(方舟Web)提供了Web组件,用于在应用程序中显示Web页面内容。常见使用场景包括:
  • 应用集成Web页面:应用可以在页面中使用Web组件,嵌入Web页面内容,以降低开发成本,提升开发、运营效率。
  • 浏览器网页浏览场景:浏览器类应用可以使用Web组件,打开三方网页,使用无痕模式浏览Web页面,设置广告拦截等。
  • 小程序:小程序类宿主应用可以使用Web组件,渲染小程序的页面。
 

能力范围

Web组件为开发者提供了丰富的控制Web页面能力。包括:
  • Web页面加载:声明式加载Web页面和离屏加载Web页面等。
  • 生命周期管理:组件生命周期状态变化,通知Web页面的加载状态变化等。
  • 常用属性与事件:UserAgent管理、Cookie与存储管理、字体与深色模式管理、权限管理等。
  • 与应用界面交互:自定义文本选择菜单、上下文菜单、文件上传界面等与应用界面交互能力。
  • App通过JavaScriptProxy,与Web页面进行JavaScript交互。
  • 安全与隐私:无痕浏览模式、广告拦截、坚盾守护模式等。
  • 维测能力:DevTools工具调试能力,使用crashpad收集Web组件崩溃信息。
  • 其他高阶能力:与原生组件同层渲染、Web组件的网络托管、Web组件的媒体播放托管、Web组件输入框拉起自定义输入法、网页接入密码保险箱等。
 

约束与限制

  • Web内核版本:ArkWeb基于谷歌Chromium内核开发,使用的Chromium版本为M114。
 

Web组件


Web组件用于在应用程序中显示Web页面内容,为开发者提供页面加载、页面交互、页面调试等能力。
  • 页面加载:Web组件提供基础的前端页面加载的能力,包括加载网络页面、本地页面、Html格式文本数据。
  • 页面交互:Web组件提供丰富的页面交互的方式,包括:设置前端页面深色模式,新窗口中加载页面,位置权限管理,Cookie管理,应用侧使用前端页面JavaScript等能力。
  • 页面调试:Web组件支持使用Devtools工具调试前端页面。
页面加载是Web组件的基本功能。根据页面加载数据来源可以分为三种常用场景,包括加载网络页面、加载本地页面、加载HTML格式的富文本数据
页面加载过程中,若涉及网络资源获取,需要配置ohos.permission.INTERNET网络访问权限。
 

Web组件的生命周期


开发者可以使用Web组件加载本地或者在线网页
Web组件提供了丰富的组件生命周期回调接口,通过这些回调接口,开发者可以感知Web组件的生命周期状态变化,进行相关的业务处理。
Web组件的状态主要包括:Controller绑定到Web组件、网页加载开始、网页加载进度、网页加载结束、页面即将可见等。
Web组件网页正常加载过程中的回调事件
notion image

Web组件网页加载的状态说明

    • aboutToAppear函数:在创建自定义组件的新实例后,在执行其build函数前执行。一般建议在此设置WebDebug调试模式setWebDebuggingAccess、设置Web内核自定义协议URL的跨域请求与fetch请求的权限customizeSchemes、设置Cookie(configCookie)等。
    • onControllerAttached事件:当Controller成功绑定到Web组件时触发该回调,且禁止在该事件回调前调用Web组件相关的接口,否则会抛出js-error异常。推荐在此事件中注入JS对象registerJavaScriptProxy、设置自定义用户代理setCustomUserAgent,可以在回调中使用loadUrl,getWebId等操作网页不相关的接口。但因该回调调用时网页还未加载,因此无法在回调中使用有关操作网页的接口,例如zoomIn、zoomOut等。
    • onLoadIntercept事件:当Web组件加载url之前触发该回调,用于判断是否阻止此次访问。默认允许加载。
    • onOverrideUrlLoading事件:当URL将要加载到当前Web中时,让宿主应用程序有机会获得控制权,回调函数返回true将导致当前Web中止加载URL,而返回false则会导致Web继续照常加载URL。onLoadIntercept接口和onOverrideUrlLoading接口行为不一致,触发时机也不同,所以在应用场景上存在一定区别。主要是在LoadUrl和iframe(HTML标签,表示HTML内联框架元素,用于将另一个页面嵌入到当前页面中)加载时,onLoadIntercept事件会正常回调到,但onOverrideUrlLoading事件在LoadUrl加载时不会触发,在iframe加载HTTP(s)协议或about:blank时也不会触发。详细介绍请见onLoadIntercept和onOverrideUrlLoading的说明。
    • onInterceptRequest事件:当Web组件加载url之前触发该回调,用于拦截url并返回响应数据。
    • onPageBegin事件:网页开始加载时触发该回调,且只在主frame(表示一个HTML元素,用于展示HTML页面的HTML元素)触发。如果是iframe或者frameset(用于包含frame的HTML标签)的内容加载时则不会触发此回调。多frame页面有可能同时开始加载,即使主frame已经加载结束,子frame也有可能才开始或者继续加载中。同一页面导航(片段、历史状态等)或者在提交前失败、被取消的导航等也不会触发该回调。
    • onProgressChange事件:告知开发者当前页面加载的进度。多frame页面或者子frame有可能还在继续加载而主frame可能已经加载结束,所以在onPageEnd事件后依然有可能收到该事件。
    • onPageEnd事件:网页加载完成时触发该回调,且只在主frame触发。多frame页面有可能同时开始加载,即使主frame已经加载结束,子frame也有可能才开始或者继续加载中。同一页面导航(片段、历史状态等)或者在提交前失败、被取消的导航等也不会触发该回调。推荐在此回调中执行JavaScript脚本loadUrl等。需要注意的是收到该回调并不能保证Web绘制的下一帧将反映此时DOM的状态。
    • onPageVisible事件:Web回调事件。渲染流程中当HTTP响应的主体开始加载,新页面即将可见时触发该回调。此时文档加载还处于早期,因此链接的资源比如在线CSS、在线图片等可能尚不可用。
    • onRenderExited事件:应用渲染进程异常退出时触发该回调,可以在此回调中进行系统资源的释放、数据的保存等操作。如果应用希望异常恢复,需要调用loadUrl接口重新加载页面。
    • onDisAppear事件:组件卸载消失时触发此回调。该事件为通用事件,指组件从组件树上卸载时触发的事件。
    Loading...
    Koreyoshi
    Koreyoshi
    一个无可救药的乐观主义者
    Latest posts
    软件测试:面向对象的测试
    2025-5-28
    软件测试:集成测试
    2025-5-27
    软件测试:基于决策表的测试
    2025-5-27
    软件测试:测试驱动开发
    2025-5-27
    论文检索
    2025-5-26
    Linux:基本指令+镜像
    2025-5-26
    Announcement
    🎉写给自己的2025心愿🎉
    保研
    国奖
    完善博客
    学一门乐器
    发表一篇论文
    拍摄人生照片
    去3个城市旅游
    专业课知识视频
    拍摄毕业季视频
    ----- 2025 ------
    👏希望我们一起变好👏