HarmonyOS ArkUI实战开发-网页加载(Web)

移动应用开发中,网页使用的场景非常多,比如在APP内安排一个优惠活动啥的,就可以直接加载一个H5页面高效并且及时,也省去了使用原生开发要升级版本的麻烦,ArkUI开发框架提供了 Web 组件来加载一个网页,本节笔者简单介绍一下 Web 组件的用法。

限制与约束

  • 加载网络资源时,需要添加 ohos.permission.INTERNET 权限。

Web定义介绍

interface WebInterface {
  (value: WebOptions): WebAttribute;
}

declare interface WebOptions {
  src: string | Resource;
  controller: WebviewController;
}

使用 Web 组件时,需要传递一个 WebOptions 类型的参数, WebOptions 类型说明如下:

  • src:待加载的网页资源地址。
  • controller:页面控制器,主要控制 Web 组件各种行为,一个 WebController 对象只能控制一个 Web 组件,且必须在 Web 组件和 WebController 绑定后,才能调用 WebController 上的方法。

简单样例如下所示:

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

@Entry @Component struct WebTest {

  // Web控制器
  private webController: WebviewController = new webview.WebviewController();

  build() {
    Column({ space: 10 }) {

      Text("www.arkui.club")
        .fontSize(25)
        .backgroundColor(Color.Pink)

      Web({
        src: "https://www.arkui.club", // 默认加载 www.arkui.club 网址
        controller: this.webController
      })
        .width("100%")
        .height("100%")
    }
    .width('100%')
    .height("100%")
    .padding(10)
  }

}

Web属性介绍

declare class WebAttribute extends CommonMethod<WebAttribute> {
  javaScriptAccess(javaScriptAccess: boolean): WebAttribute;
  fileAccess(fileAccess: boolean): WebAttribute;
  onlineImageAccess(onlineImageAccess: boolean): WebAttribute;
  domStorageAccess(domStorageAccess: boolean): WebAttribute;
  imageAccess(imageAccess: boolean): WebAttribute;
  mixedMode(mixedMode: MixedMode): WebAttribute;
  javaScriptProxy(javaScriptProxy: { object: object, name: string, methodList: Array<string>, controller: WebController }): WebAttribute;
  databaseAccess(databaseAccess: boolean): WebAttribute;
  userAgent(userAgent: string): WebAttribute;
  // 省略部分方法
}
  • javaScriptAccess:设置是否允许执行 JS 脚本,默认为 true ,表示允许执行。
  • fileAccess:设置是否开启通过 $rawfile(filepath/filename) 访问应用中 rawfile 路径的文件, 默认为 false,表示不启用。
  • fileFromUrlAccess:设置是否允许通过网页中的 JS 脚本访问 $rawfile(filepath/filename) 的内容,默认为 false ,表示未启用。
  • imageAccess:设置是否允许自动加载图片资源,默认为 true ,表示允许。
  • onlineImageAccess:设置是否允许从网络加载图片资源(通过 HTTP 和 HTTPS 访问的资源),默认为 true ,表示允许访问。
  • domStorageAccess:设置是否开启文档对象模型存储接口(DOM Storage API)权限,默认为 false ,表示未开启。
  • mixedMode:设置是否允许加载超文本传输协议(HTTP)和超文本传输安全协议(HTTPS)混合内容,默认为 MixedMode.None ,表示不允许加载 HTTP 和 HTTPS 混合内容。
  • databaseAccess:设置是否开启数据库存储 API 权限,默认为 false ,表示不开启。
  • userAgent:设置用户代理。
  • javaScriptProxy:注入 JavaScript 对象到 window 对象中,并在 window 对象中调用该对象的方法。所有参数不支持更新。

📢: Web 组件的属性方法比较多,笔者仅仅介绍常用的,有关更多属性的用法,读者请自行查阅文档。

Web事件介绍

declare class WebAttribute extends CommonMethod<WebAttribute> {
  onPageBegin(callback: (event?: { url: string }) => void): WebAttribute;
  onPageEnd(callback: (event?: { url: string }) => void): WebAttribute;
  onProgressChange(callback: (event?: { newProgress: number }) => void): WebAttribute;
  onTitleReceive(callback: (event?: { title: string }) => void): WebAttribute;
  onAlert(callback: (event?: { url: string, message: string, result: JsResult }) => boolean): WebAttribute;
  onConsole(callback: (event?: { message: ConsoleMessage }) => boolean): WebAttribute;
  onErrorReceive(callback: (event?: { request: WebResourceRequest, error: WebResourceError }) => void): WebAttribute;
  onFileSelectorShow(callback: (event?: { callback: Function, fileSelector: object }) => void): WebAttribute;
}
  • onPageBegin:网页开始加载时触发该回调,且只在 主frame 触发,iframe或者frameset的内容加载时不会触发此回调。
  • onPageEnd:网页加载完成时触发该回调,且只在 主frame 触发。
  • onProgressChange:网页加载进度变化时触发该回调,newProgress 的取值范围为[0 ~ 100]。
  • onTitleReceive:网页 document 标题更改时触发该回调。
  • onAlert:H5 页面内调用 alert() 时触发该回调。
  • onConsole:H5 页面内调用 console() 方法时的回调。
  • onFileSelectorShow:H5 页面 input 标签的 type 为 flie 时,点击按钮触发该回调。

WebviewController定义介绍

WebController 用来控制Web组件的各种行为,一个 WebController 对象只能控制一个 Web 组件,且必须在 Web 组件和 WebController 绑定后,才能调用 WebController 上的方法。

declare class WebController {
  constructor();
  onInactive(): void;
  onActive(): void;
  clearHistory(): void;
  runJavaScript(options: { script: string, callback?: (result: string) => void });
  loadData(options: { data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string });
  loadUrl(options: { url: string | Resource, headers?: Array<Header> });
  accessBackward(): boolean;
  accessForward(): boolean;
  accessStep(step: number): boolean;
  backward();
  forward();
  // 省略部分方法
}
  • onInactive:设置 Web 组件进入未激活状态。
  • onActive:设置 Web 组件进入激活状态。
  • clearHistory:清除所有前进后退记录。
  • runJavaScript:异步执行 JS 脚本,并通过回调方式返回脚本执行的结果。该方法需要在 loadUrl() 完成后,比如 onPageEnd() 中调用。
  • loadData / loadUrl:加载指定的网页内容。
  • accessBackward / accessForward:页面是否可以前进或后退,即当前页面是否有前进或者后退的历史记录。
  • forward / backward:按照历史栈,前进或者后台一个页面。

Web完整样例

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

let url_data = `
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
    <script type='text/javascript'>
      function test() {
        alert('button click');
      }
    </script>
</head>

<body>
<button onclick='test()' type='button'>Button Click</button>
</body>
</html>
`

@Entry @Component struct WebTest {

  private webController: webview.WebviewController = new webview.WebviewController();

  build() {
    Column({ space: 10 }) {

      Row({space: 10}) {
        Button("刷新")
          .onClick(() => {
            this.webController.refresh();
          })

        Button("加载本地资源")
          .onClick(() => {
            this.webController.loadData(
              url_data,
              "text/html",
              "utf-8"
            )
          })

        Button("执行本地JS代码")
          .onClick(() => {
            this.webController.runJavaScript("test()");
          })
      }

      Row({space: 10}) {
        Button("前进")
          .onClick(() => {
            this.webController.forward();
          })

        Button("后退")
          .onClick(() => {
            this.webController.backward();
          })

        Button("清除记录")
          .onClick(() => {
            this.webController.clearHistory();
          })
      }

      Web({
        src: "https://www.arkui.club", // 默认加载 www.arkui.club 网址
        controller: this.webController
      })
        .width("100%")
        .height("100%")
    }
    .width('100%')
    .height("100%")
    .padding(10)
  }
}

小结

本节笔者简单介绍了 Web 组件的使用,由于 Web 组件提供的方法非常多,笔者没办法把这些方法都一一列举出来,读者可执行查阅官方文档熟悉各方法的用法。

码牛课堂也为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术,针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线。大家可以进行参考学习:https://qr21.cn/FV7h05

①全方位,更合理的学习路径
路线图包括ArkTS基础语法、鸿蒙应用APP开发、鸿蒙能力集APP开发、次开发多端部署开发、物联网开发等九大模块,六大实战项目贯穿始终,由浅入深,层层递进,深入理解鸿蒙开发原理!

②多层次,更多的鸿蒙原生应用
路线图将包含完全基于鸿蒙内核开发的应用,比如一次开发多端部署、自由流转、元服务、端云一体化等,多方位的学习内容让学生能够高效掌握鸿蒙开发,少走弯路,真正理解并应用鸿蒙的核心技术和理念。

③实战化,更贴合企业需求的技术点
学习路线图中的每一个技术点都能够紧贴企业需求,经过多次真实实践,每一个知识点、每一个项目,都是码牛课堂鸿蒙研发团队精心打磨和深度解析的成果,注重对学生的细致教学,每一步都确保学生能够真正理解和掌握。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:https://qr21.cn/FV7h05

如何快速入门:

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr21.cn/FV7h05

大厂鸿蒙面试题::https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/565398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

音频文件太大了怎么办?如何实现音乐内存压缩?超实用的音频压缩技巧分享给你

一&#xff0c;我们需要了解音乐文件是如何存储的。 音乐文件通常以数字格式存储&#xff0c;如 MP3、WAV、FLAC等。这些格式各有优缺点&#xff0c;但共同点是它们都需要占用一定的存储空间。文件大小取决于多个因素&#xff0c;包括音频质量、编码格式和采样率等。因此&…

网盘_游戏_博客自动化部署(Nginx多项目部署)

目录 一.前提介绍 二.环境介绍 三.自述&#xff08;脚本&#xff09; 四.关于Nginx多项目部署 一.前提介绍 在我之前的博客里详细介绍了上述项目的部署&#xff0c;那么如何使用简单脚本自动部署和使用Nginx多项目部署是本文来介绍的基础篇章。 二.环境介绍 CentOS Linux…

线性表的顺序存储如何设计实现?

如何存储 顺序及链式实现 计算机中的状态

springboot的开发流程

文章目录 springboot的开发流程 1.创建maven项目2.引用依赖 1&#xff09;起步依赖2&#xff09;项目依赖3.启动类4.配置文件5.业务代码 1)dto2)controller6.restful测试7.部署 1&#xff09;打包2&#xff09;部署 springboot的开发流程 1.创建maven项目 新建maven项目 配置…

键盘打字练习游戏代码

效果图 部分代码 index.html <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1.0" /> <meta http-equiv"…

编程新手必看,Python3中File(文件) 方法知识点及语法学习总结(24)

**介绍&#xff1a; Python3 中的file对象提供了多种方法来操作文件&#xff0c;以下是一些常用的文件方法&#xff1a; close()&#xff1a;关闭一个已打开的文件。这是释放文件资源的重要步骤&#xff0c;通常在文件操作完成后调用。flush()&#xff1a;刷新文件的缓冲区&am…

vos3000外呼系统客户端无法安装如何解决?

如果 VOS3000 外呼系统客户端无法安装&#xff0c;可以尝试以下解决方法&#xff1a; 检查系统要求&#xff1a; 确保你的计算机满足 VOS3000 外呼系统客户端的系统要求&#xff0c;包括操作系统版本、内存、处理器等。如果系统不符合要求&#xff0c;可能会导致安装失败或者运…

AI生图美学在淘宝的实践应用

本文介绍了如何制定和应用美学标准来评估和改善人工智能生成的图像质量&#xff0c;特别是在电商领域的应用&#xff0c;主要分为制定美学标准、训练美学模型、应用美学模型、升级淘宝风格模型四个步骤。 美学的定义与分析 图像质量标准&#xff1a;现代设计框架下&#xff0c;…

《自动机理论、语言和计算导论》阅读笔记:p261-p314

《自动机理论、语言和计算导论》学习第 10 天&#xff0c;p261-p314总结&#xff0c;总计 48 页。 一、技术总结 1.generating & reachable 2.Chomsky Normal Form(CNF) 乔姆斯基范式。 3.pumping lemma 泵作用引理。引理&#xff1a;引理是数学中为了取得某个更好的…

JAVA基础之垃圾收集器

一 JVM垃圾收集 分代收集思想 当前虚拟机的垃圾收集一般采用分代收集算法&#xff0c;这种算法本身没有创新性&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆内存分为新生代和老年代&#xff0c;这样我们就可以根据不同年龄到的特点选择不同的垃圾收集…

试用花生壳软件,实现外网访问内网web服务器

试用花生壳软件&#xff0c;实现外网访问内网web服务器。今天查看了一下家用的WiFi路由器和光猫。在wifi路由器里看到了DDNS&#xff0c;看到了花生壳。这时想到了花生壳软件能实现外网访问内网web服务器的功能。于是试用了一下。 先游览了贝锐花生壳公司网站&#xff0c;了解…

落地灯几瓦合适?落地护眼灯推荐

不少人选择在客厅中摆放落地灯的时候&#xff0c;都不知道客厅落地灯多少瓦合适&#xff0c;接下来小编为大家整理了有关客厅落地灯多少瓦合适的相关内容&#xff0c;顺便分享一下落地灯应该怎么选&#xff0c;以及推荐五款落地护眼灯&#xff0c;供大家在选择的时候参考。 灯光…

如何使用ChatGPT仿写一篇学术论文

点击下方▼▼▼▼链接直达AIPaperPass &#xff01; AIPaperPass - AI论文写作指导平台 目录 1.仿写的目的 2.根据专业方向搜集合适的文献 3.总结想要仿写的文献 4.使用ChatGPT一步一步仿写 5.书籍介绍 AIPaperPass智能论文写作平台 深入地阅读和分析你研究领域的相关文…

路由过滤实验

目录 一、实验拓扑 ​编辑 二、实验要求 三、实验思路 四、实验配置 1、配置IP地址 2、配置RIP 3、配置OSPF 4、双向引入 5、使用路由过滤&#xff08;acl&#xff09;&#xff0c;除 R4 上的业务网段以外&#xff0c;其他业务网段路由都引入到对方协议内部 6、配置地…

【函数式接口使用✈️✈️】配合策略模式实现文件处理的案例

目录 &#x1f378;前言 &#x1f37b;一、功能描述 &#x1f37a;二、面向对象设计模式 &#x1f379;三、策略模式 &#x1f366;四、策略 VS 面向对象 &#x1f368;章末 &#x1f378;前言 小伙伴们大家好&#xff0c;上周初步了解了下函数式接口&#xff0c;Consume…

通过DaoCloud DCE的场景化应用看容器云平台的核心能力(三)

以下场景来自DaoCloud官方文档场景化视频&#xff0c;这里以文字形式简单提取下要点&#xff0c;包括操作步骤和一些问题。 一共13个场景&#xff0c;本篇包含5个&#xff1a;9.快速定位异常与排障、10.基于CICD的应用发布、11.基于GitOps持续部署云原生应用、12.使用中间件与…

数据结构与算法笔记:线性建堆

ACM大牛带你玩转算法与数据结构-课程资料 本笔记属于船说系列课程之一&#xff0c;课程链接&#xff1a; 哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep66799?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说系列课程-年度会…

110. turtle库创建画笔对象

110. turtle库创建画笔对象 【目录】 文章目录 110. turtle库创建画笔对象1. 知识回顾-类与对象1.1 类1.2 对象 2. 创建画笔对象2.1 方法12.1 方法2 3. 绘制一个正方形4. 总结 【正文】 1. 知识回顾-类与对象 类是创建对象的蓝图。 对象是类的实例。 1.1 类 类&#xff08;…

001-谷粒商城-微服务剖析

1、架构图 还是很强的&#xff0c;该有的都有 2、微服务模块 SpringCloudAlibaba组件包括 SentinelNacosRocketMQSeata 搭配SpringCloudAlibaba组件 OpenFeignGateWayRibbn gateway使用了SpringWebFlux&#xff0c;前几天研究到&#xff0c;为什么springboot不直接使用Spri…

vue3【详解】选项式 API 实现逻辑复用

抽离逻辑代码到一个函数函数命名约定为 useXxxx格式 ( React Hooks 也是 )在 setup 中引用 useXxx 函数 演示代码&#xff1a;实时获取鼠标的坐标 逻辑封装 useMousePosition.js // 导入 ref, onMounted, onUnmounted import { ref, onMounted, onUnmounted } from "vue…