【鸿蒙应用ArkTS开发系列】- Web组件使用讲解

这篇具有很好参考价值的文章主要介绍了【鸿蒙应用ArkTS开发系列】- Web组件使用讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Web组件介绍

二、创建组件

权限列表

三、设置样式和属性

四、添加事件和方法

五、访问本地Html

1、本地html文件创建

2、本地html文件加载

2、JS对象注入,Html使用JS对象调用客户端方法

3、客户端调用本地Html网页中的JS方法


使用鸿蒙的ArkUI框架开发鸿蒙应用的时候,官方为我们提供了一个web组件,提供给开发者使用,通过本文学习,我们将了解并学会如何使用Web组件进行如下操作:

  • 在线网页加载
  • 本地离线网页加载
  • Web组件常用属性设置
  • 客户端与网页之间的双向通信交互

下面我们先来看下Web组件的介绍。

一、Web组件介绍

Web是提供网页显示能力的组件,具体用法请参考 Web API。

二、创建组件

在pages目录下创建WebComponent .ets的Page页面,  页面上放一个Web组件。在Web组件中通过src指定引用的网页路径,controller为组件的控制器,通过controller绑定Web组件,用于调用Web组件的方法。

​

@Entry

@Component

struct WebComponent {

  controller: WebController = new WebController();

  build() {

    Column() {

      Web({ src: 'https://www.douban.com/', controller: this.controller })

    }

  }

}

​

使用Web组件,访问在线网页,需要给应用配置网络权限,

权限列表

访问在线网页时需添加网络权限:ohos.permission.INTERNET

三、设置样式和属性

Web组件的使用需要添加丰富的页面样式和功能属性。设置height、padding样式可为Web组件添加高和内边距,设置fileAccess属性可为Web组件添加文件访问权限,设置javaScriptAccess属性为true使Web组件具有执行JavaScript代码的能力。

​

@Entry

@Component

struct WebComponent {

  fileAccess: boolean = true;

  controller: WebController = new WebController();

  build() {

    Column() {

      Text('Hello world!')

        .fontSize(20)

      Web({ src: 'https://www.douban.com/', controller: this.controller })

        // 设置高和内边距

        .height(500)

        .padding(20)

        // 设置文件访问权限和脚本执行权限

        .fileAccess(this.fileAccess)

        .javaScriptAccess(true)

      Text('End')

        .fontSize(20)

    }

  }

}

​

四、添加事件和方法

为Web组件添加onProgressChange事件,该事件回调Web引擎加载页面的进度值。将该进度值赋值给Progress组件的value,控制Progress组件的状态。当进度为100%时隐藏Progress组件,Web页面加载完成。

​
import web_view from '@ohos.web.webview';

@Entry

@Component

struct RemoteWebPage {

  @State progress: number = 0

  @State hideProgress: boolean = true

  controller: web_view.WebviewController = new web_view.WebviewController()

  build() {

    Column() {

      Progress({ total: 100, value: this.progress })

        .color('#ff5cea20')

        .visibility(this.hideProgress ? Visibility.None : Visibility.Visible)

      Web({ src: 'https://www.douban.com/', controller: this.controller })

        .height('100%')

        // 添加onProgressChange事件

        .onProgressChange(e => {

          this.progress = e.newProgress

         // 当进度100%时,进度条消失

          if (this.progress == 100) {

            this.hideProgress = true

          } else {

            this.hideProgress = false

          }

        })

    }.backgroundColor('0xFFFFFF')

  }

}

​

效果如下:

【鸿蒙应用ArkTS开发系列】- Web组件使用讲解,Harmony,harmonyos,前端,ArkUI,ArkTS,鸿蒙开发

上面讲的是使用Web组件访问一个在线网页,那怎么加载本地网页文件呢?

五、访问本地Html

先看效果图

【鸿蒙应用ArkTS开发系列】- Web组件使用讲解,Harmony,harmonyos,前端,ArkUI,ArkTS,鸿蒙开发

实现了一个加载本地网页文件,然后Html网页中调用客户端的方法,进行了一个关闭页面和拉起系统相册的功能,下面开始讲下代码实现。

1、本地html文件创建

在entry/src/main/resources/rawfile目录下,我们创建一个index.html文件

<!-- index.html -->

<!DOCTYPE html>

<html>

<body>

<p>Hello World</p>

<p>这个是来自本地的html文件</p>



<button type="button" onclick="window.jsBridge.closePage()">点击调用原生关闭页面</button>

<button type="button" onclick="window.jsBridge.jumpSystemPicture()">点击拉起原生系统相册</button>

</body>

</html>

2、本地html文件加载

创建一个LocalWebPage页面,加载index.html 文件

import web_view from '@ohos.web.webview';



@Entry

@Component

struct LocalWebPage {

  controller: web_view.WebviewController = new web_view.WebviewController()



  build() {

    Column() {

      Web({ src: $rawfile("index.html"), controller: this.controller })

        .height('100%')

    }

  }

}

这里我们使用$rawfile("index.html")进行本地html文件获取。

2、JS对象注入,Html使用JS对象调用客户端方法

如果需要进行网页跟客户端进行交互,我们需要设置往Html中注入一个JS对象,具体如下:

import web_view from '@ohos.web.webview';

import common from '@ohos.app.ability.common';

import router from '@ohos.router';



@Entry

@Component

struct LocalWebPage {

  controller: web_view.WebviewController = new web_view.WebviewController()



  jsBridge = {



    jumpSystemPicture() {



      let context = getContext(this) as common.UIAbilityContext;



      let want  = {

          "deviceId": "",

          "bundleName": "",

          "abilityName": "",

          "uri": "",

          "type": "image/*",

          "action": "android.intent.action.GET_CONTENT",

          "parameters":{},

          "entities":[]



      };

      context.startAbility(want);

    },



    closePage() {

      router.back()

    }

  }



  build() {

    Column() {

      Web({ src: $rawfile("index.html"), controller: this.controller })

        .javaScriptAccess(true)

        .javaScriptProxy({

          object: this.jsBridge,

          name: "jsBridge",

          methodList: ["closePage","jumpSystemPicture"],

          controller: this.controller

        })

        .height('100%')

    }

  }

}

这里我们定义了一个JS对象jsBridge ,定义了两个方法,jumpSystemPicture 和closePage,分别用于html 拉起系统相册和关闭客户端页面,然后使用Web的 javaScriptProxy方法进行JS对象注入设置,具体的配置如上述代码,需要配置对象名称,注入方法。

看下上文中Html 调用JS的代码,比如调用客户端的关闭页面方法,使用

window.jsBridge.closePage() 进行触发。

3、客户端调用本地Html网页中的JS方法

在onPageEnd事件中添加runJavaScript方法。onPageEnd事件是网页加载完成时的回调,runJavaScript方法可以执行HTML中的JavaScript脚本。当页面加载完成时,触发onPageEnd事件,调用HTML文件中的test方法,在控制台打印信息。

import web_view from '@ohos.web.webview';

import router from '@ohos.router';



@Entry

@Component

struct LocalWebPage {

  controller: web_view.WebviewController = new web_view.WebviewController()





  build() {

    Column() {

      Web({ src: $rawfile("index.html"), controller: this.controller })

        .javaScriptAccess(true)

      .onPageEnd(e =>{

          // test()在index.html中定义

          this.controller.runJavaScript('test()');

          console.info('url: ', e.url);

        })

        .height('100%')

    }

  }

}
<!-- index.html -->

<!DOCTYPE html>

<html>

<body>

<p>Hello World</p>

<p>这个是来自本地的html文件</p>



<button type="button" onclick="window.jsBridge.closePage()">点击调用原生关闭页面</button>

<button type="button" onclick="window.jsBridge.jumpSystemPicture()">点击拉起原生系统相册</button>

</body>

<script type="text/javascript">

  function test() {

      console.info('Ark Web Component');

  }

</script>

</html>

上面方法只提到了调用网页中的JS方法,如果要异步获取JS方法返回的数据,应该怎么操作呢,感兴趣的评论区留意讨论,有时间我再补充讲解下。

本文到此完结,谢谢阅读!文章来源地址https://www.toymoban.com/news/detail-727431.html

到了这里,关于【鸿蒙应用ArkTS开发系列】- Web组件使用讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Flex)

    以弹性方式布局子组件的容器组件。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 Flex组件在渲染时存在二次布局过程,因此在对性能有严格要求的场景下建议使用Column、Row代替。 Flex组件主轴默认不设置时撑满父容

    2024年04月11日
    浏览(53)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:组件标识)

    id为组件的唯一标识,在整个应用内唯一。本模块提供组件标识相关接口,可以获取指定id组件的属性,也提供向指定id组件发送事件的功能。 说明: 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 名称 参数说明 描述 id string 组件

    2024年04月22日
    浏览(67)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:List)

    列表包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 该组件内容区小于一屏时,默认没有回弹效果。需要回弹效果,可以通过edgeEffe

    2024年04月13日
    浏览(108)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:组件内容模糊)

    为当前组件添加内容模糊效果。 说明: 从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 foregroundBlurStyle(value: BlurStyle, options?: ForegroundBlurStyleOptions) 为当前组件提供内容模糊能力。 系统能力:  SystemCapability.ArkUI.ArkUI.Full 参数: 参数

    2024年03月09日
    浏览(57)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:UIExtensionComponent (系统接口))

    UIExtensionComponent用于支持在本页面内嵌入其他应用提供的UI。展示的内容在另外一个进程中运行,本应用并不参与其中的布局和渲染。 通常用于有进程隔离诉求的模块化开发场景。 说明: 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的

    2024年04月13日
    浏览(48)
  • 【鸿蒙应用ArkTS开发系列】- 选择图片、文件和拍照功能实现

    在使用App的时候,我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件,那在鸿蒙原生应用中,我们怎么开发这样的功能呢? 本文会给大家对这个功能点进行讲解,我们采用的是拉起系统组件来进行图片、文件的选择,拉起系统相机进行拍照的这样一种

    2024年02月04日
    浏览(61)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)下篇

    onRequestSelected onRequestSelected(callback: () = void) 当Web组件获得焦点时触发该回调。 示例: onScreenCaptureRequest10+ onScreenCaptureRequest(callback: (event?: { handler: ScreenCaptureHandler }) = void) 通知收到屏幕捕获请求。 参数: 参数名 参数类型 参数描述 handler ScreenCaptureHandler 通知Web组件用户操作行

    2024年04月09日
    浏览(50)
  • 鸿蒙4.0开发笔记之ArkTS语法基础的UI描述、基础组件的使用与如何查看组件是否有参数(八)

    在HarmonyOS的ArkTS语法中,万物皆组件。ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。根据组件构造方法的不同,创建组件包含有参数和无参数两种方式。 1、无/有参数组件 无参数组件:

    2024年02月03日
    浏览(40)
  • 鸿蒙ArkTS Web组件加载空白的问题原因及解决方案

    初学鸿蒙开发,按照官方文档Web组件文档《使用Web组件加载页面》示例中的代码照抄运行后显示空白,纠结之余多方搜索后扔无解决方法。 无意间gitee搜索鸿蒙web组件项目代码时看到 Web组件抽奖案例(ArkTS) Readme文档中有一句话,如下: 本篇Codelab使用了在线网页,需要在配

    2024年02月04日
    浏览(74)
  • 鸿蒙实战:ArkTs 开发一个鸿蒙应用

    学习过的 ArkTs 知识点,一步一步开发一个小的鸿蒙应用示例,涉及到  ArkTs 语法、注解 @Entry 、 @Component 、 @state 、路由、生命周期、 @Prop 、 @Link 、常用组件的使用等等知识点。 要开发一个鸿蒙应用,首先我们需要知道 系统是如何找到页面的启动入口 。 鸿蒙如何启动应用

    2024年02月22日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包