当前位置: 首页 > article >正文

HarmonyOS Next应用开发实战:ArkWeb组件使用介绍及使用举例

ArkWeb简介

ArkWeb(方舟Web)是HarmonyOS Next中提供的一个Web组件,主要用于在应用程序中显示Web页面内容。这个组件使得开发者可以在HarmonyOS应用中嵌入Web页面,从而降低开发成本,提升开发和运营效率。

使用场景

ArkWeb的常见使用场景包括:

  1. 应用集成Web页面:在应用内部页面中使用Web组件嵌入Web页面内容,这对于展示一些外部信息,如新闻、教程等非常适用。
  2. 浏览器网页浏览场景:在浏览器类应用中使用Web组件打开第三方网页,ArkWeb支持无痕模式浏览和广告拦截设置,为用户提供更好的浏览体验。
  3. 小程序:宿主应用可以使用Web组件来渲染小程序的页面,这使得小程序能够与鸿蒙生态系统更好地结合。
  4. 隐私政策和用户协议:对于这类常用场景,通常我们会提供url地址,通过ArkWeb的Web组件动态展示内容,减少重复开发。

代码示例

下面是一个简单的例子,展示如何在HarmonyOS应用中新建一个webPage页面来加载Web页面。

// 引入相关的模块
import webview from '@ohos.web.webview';
import { router } from '@kit.ArkUI'
import { HdNav } from '../common/HdNav';

// 定义组件WebViewPage
@Entry
@Component
struct WebViewPage {
  // 定义状态变量
  @State title: string | undefined = "";
  @State url: string = "";
  controller: webview.WebviewController = new webview.WebviewController();

  // 组件显示前获取路由参数
  aboutToAppear(): void {
    let params = router.getParams() as Record<string, string>;
    this.url = params["url"] as string;
  }

  // 构建组件的UI
  build() {
    Column() {
      // 使用HdNav组件构建导航栏
      HdNav({
        title: this.title
      })

      // 使用Web组件加载指定URL的网页
      Web({ src: this.url, controller: this.controller })
        .javaScriptAccess(true) // 允许JavaScript执行
        .onTitleReceive((event) => {
          this.title = event?.title; // 接收网页标题并更新
        })
        .layoutWeight(1) // 占据剩余空间
    }
    .justifyContent(FlexAlign.Start) // 顶部对齐
  }
}

跳转与返回

跳转到Web页面

要实现点击用户协议跳转到Web页面,可以通过router路由传递url参数:

.onClick(() => {
  router.pushUrl({
    url: 'pages/WebViewPage',
    params: {url: Constant.PRI_URL}
  });
})

返回功能

默认情况下,ArkWeb组件的Web页面没有左上角的返回按钮。为了解决这个问题,我们可以封装一个titleBar组件HdNav,并在其中添加返回按钮的功能:

import { router } from '@kit.ArkUI'
import { GlobalContext } from '../utils/GlobalContext'

@Component
export struct HdNav {
  @StorageProp('topHeight')
  topHeight: number = 0
  @Prop
  title: string | Resource = ''
  @Prop
  hasBorder: boolean = false
  @Prop leftIcon: ResourceStr = $r('app.media.icon_title_back') // 左侧图标,这里使用返回图标
  @Prop rightIcon: ResourceStr = $r('sys.media.ohos_ic_public_more')
  @BuilderParam titleBuilder: () => void
  @BuilderParam rightBuilder: () => void

  @Builder
  defaultMenu() {
  }

  // 构建导航栏的UI
  build() {
    Row() {
      // 返回按钮
      Image(this.leftIcon)
        .size({ width: 34, height: 36 })
        .onClick(() => {
          GlobalContext.getContext().setObject('isJumpPrivacy', false);
          router.back() // 点击返回按钮时,返回上一页
        })
        .padding({
          left: 15,
          right: 10,
          bottom: 10,
          top: 10
        })

      // 标题栏
      Row() {
        if (this.title) {
          Text(this.title)
            .fontWeight(600)
            .layoutWeight(1)
            .textAlign(TextAlign.Center)
            .fontSize(18)
            .maxLines(1)
            .textOverflow({ overflow: TextOverflow.Ellipsis })
        } else if (this.titleBuilder) {
          this.titleBuilder()
        }
      }
      .height(56)
      .layoutWeight(1)

      // 右侧图标或自定义内容
      if (this.rightBuilder) {
        Stack() {
          this.rightBuilder()
        }.padding(15)
      } else {
        Blank().width(24)
      }
    }
    .height(56 + this.topHeight)
    .width('100%')
    .border({
      width: { bottom: this.hasBorder ? $r('app.float.common_border_width') : 0 },
      color: $r('app.color.common_gray_bg')
    })
    .backgroundColor($r('app.color.white'))
  }
}

作者:csdn猫哥 blog.csdn.net/yyz_1987,转载请注明出处。

团队介绍

本文由坚果派团队创作。坚果派团队由一群热爱HarmonyOS/OpenHarmony的开发者组成,拥有12个华为HDE认证开发者,以及来自多个领域的30多位拥有大量粉丝的博主。团队专注于分享HarmonyOS/OpenHarmony、ArkUI-X、元服务、仓颉的相关内容,目前团队成员分布在包括北京、上海、南京、深圳、广州、宁夏等多个城市。已开发鸿蒙原生应用和三方库共60+,欢迎各位开发者与我们交流探讨。

版权声明

本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/yyz_1987/article/details/144561085


http://www.kler.cn/a/444247.html

相关文章:

  • 【活动邀请·深圳】深圳COC社区 深圳 AWS UG 2024 re:Invent re:Cap
  • 前端yarn工具打包时网络连接问题排查与解决
  • 楚慧杯-Web
  • 简单工厂模式和策略模式的异同
  • Redis的主从集群以及哨兵机制学习总结
  • 2025.01.15python商业数据分析top2
  • 【原创教程】西门子1500TCP_UDP通信说明大全(下篇)
  • 【多模态实战】在本地计算机上使用小型视觉语言模型【VLM】进行目标计数【附源码】
  • Liblib上面下载的各种模型,如果使用comfy,如何确定其存放的位置?
  • 解析在OceanBase创建分区的常见问题|OceanBase 用户问题精粹
  • 基于asp.net游乐园管理系统设计与实现
  • 【论文阅读】从单张图像到高质量3D模型的快速生成方法
  • Kaggler日志--Day7
  • 无刷电机的概念
  • 【数据集】车内视角拍摄道路路面缺陷数据集1075张3类标签YOLO+VOC格式
  • 前端大数字精度丢失?Choerodon UI 大数字解决方案:精确性与灵活性的结合!
  • WebGIS开发中WKT和GeoJSON互相转换
  • 彻底解决idea不识别.gitignore
  • 框架问题学习
  • Chrome 浏览器原生功能截长屏
  • Linux shell脚本练习(七)
  • (2024年最新)Linux(Ubuntu) 中配置静态IP(包含解决每次重启后配置文件失效问题)
  • js常用方法之: 加减乘除运算
  • 联合索引的使用
  • YOLOv8目标检测——详细记录使用ONNX Runtime进行推理部署C++/Python实现
  • elasticsearch 7.6.2版本即使使用wildcard模糊查询,也毫无过滤效果分析