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

HarmonyOS开发-ArkWeb开发指导

HarmonyOS开发-ArkWeb开发指导

标题ArkWeb简介

ArkWeb(方舟Web)是HarmonyOS应用程序框架中的Web组件,用于在应用程序中显示Web页面内容,为开发者提供以下三大能力:

  • 页面加载:支持加载网络页面、本地页面、HTML格式文本数据。

  • 页面交互:支持深色模式、新窗口打开、位置权限管理、Cookie管理、JavaScript互调等。

  • 页面调试:支持使用DevTools工具调试前端页面,使用crashpad收集崩溃信息。

ArkWeb组件的生命周期

Web组件提供丰富的生命周期回调接口,开发者可据此感知状态变化并进行业务处理。主要回调包括:

回调接口说明
onControllerAttachedController绑定到Web组件时触发,推荐在此注入JS对象、设置UserAgent等。
onLoadIntercept加载URL前触发,用于判断是否阻止此次访问。
onOverrideUrlLoadingURL将要加载时触发,返回true可中止加载。
onInterceptRequest加载URL前触发,用于拦截URL并返回响应数据。
onPageBegin网页开始加载时触发(仅主frame)。
onProgressChange页面加载进度变化时触发。
onPageEnd网页加载完成时触发(仅主frame)。
onPageVisible页面主体开始加载,即将可见时触发。
onRenderExited渲染进程异常退出时触发,可进行资源释放或重新加载。
onDisAppear组件卸载时触发。

如下图所示:
在这里插入图片描述

基本属性和事件

1. 设置UserAgent

默认UserAgent格式如下:

text

Mozilla/5.0 ({deviceType}; {OSName} {OSVersion}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/{ArkWeb VersionCode} {Mobile}

2. Cookie管理

  • Cookie默认SameSite=Lax,仅在同源导航时发送。

  • 使用WebCookieManager类管理Cookie,存储路径为应用沙箱下的/proc/[pid]/root/data/storage/el2/base/cache/web/Cookies

3. 缓存与存储管理

  • Cache模式

    • Default:优先使用未过期缓存。

    • None:先查缓存,再走网络。

    • Online:仅从网络加载。

    • Only:仅从缓存加载。

  • Dom Storage

    • Session Storage:临时存储,随会话结束释放。

    • Local Storage:持久化存储,落盘在应用目录。

4. 新窗口打开页面

  • 使用multiWindowAccess()设置是否允许新窗口打开。

  • 通过onWindowNew()接收新窗口事件,并创建新窗口处理。

下面我们通过代码演示一下效果:

第一种方式,回调代码示例:

Html部分,本地html的文件需要放到Rawfile文件中:


<!-- index.html -->
<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="callArkTS()">Click Me!</button>
<h1 id="text">这是一个测试信息,默认字体为黑色,调用runJavaScript方法后字体为绿色,调用runJavaScriptCodePassed方法后字体为红色</h1>
<script>
// 调用有参函数时实现。
var param = "param: JavaScript Hello World!";
function htmlTest (param) {
document.getElementById('text').style.color = 'green';
console.log(param);
}
// 调用无参函数时实现。
function htmlTest () {
document.getElementById('text').style.color = 'green';
}
// Click Me!触发前端页面callArkTS()函数执行JavaScript传递的代码。
function callArkTS () {
changeColor();
}
</script>
</body>
</html>

HarmonyOS应用代码:

import { webview } from '@kit.ArkWeb';@Entry
@Component
struct WebComponent {webviewController: webview.WebviewController = newwebview.WebviewController();aboutToAppear() {// 配置Web开启调试模式webview.WebviewController.setWebDebuggingAccess(true);}build() {Column() {Button('runJavaScript').onClick(() => {// 前端页面函数无参时,将param删除。this.webviewController.runJavaScript('htmlTest (param)');})Button('runJavaScriptCodePassed').onClick(() => {// 传递runJavaScript侧代码方法。this.webviewController.runJavaScript(`function
changeColor(){document.getElementById('text').style.color = 'red'}`);})Web({ src: $rawfile('index.html'), controller: this.webviewController })}}
}

第二种方式,注册监听

鸿蒙侧代码:

import { webview } from '@kit.ArkWeb';
import { BusinessError } from '@kit.BasicServicesKit';class testClass {constructor() {}test(): string {return "ArkUI Web Component";}toString(): void {console.log('Web Component toString');}
}@Entry
@Component
struct Index {webviewController: webview.WebviewController = newwebview.WebviewController();@State testObj: testClass = new testClass();build() {Column() {Button('refresh').onClick(() => {try {this.webviewController.refresh();} catch (error) {console.error(` ErrorCode:  ${(error as BusinessError).code},   Message:  ${(error as BusinessError).message}`);}})Button('Register JavaScript To Window').onClick(() => {try {this.webviewController.registerJavaScriptProxy(this.testObj, "testObjName", ["test", "toString"],// 可选参数, asyncMethodList[],// 可选参数,  permission'{"javascriptProxyPermission":{"urlPermissionList ":[{"scheme":"resource","hos  t":"rawfile","port":"","path":""},' +'{"scheme":"e","host":"f","port":"g","path":"h"}],"methodList":[{"methodNam  e":"test","urlPermissionList":' +'[{"scheme":"https","host":"xxx.com","port":"","path":""},{"scheme":"resource   ","host":"rawfile","port":"","path":""}]},' +'{"methodName":"test11","urlPermissionList":[{"scheme":"q","host":"r","port    ":"","path":"t"},' +'{"scheme":"u","host":"v","port":"","path":""}]}]}}');} catch (error) {console.error(` ErrorCode:  ${(error as BusinessError).code},   Message: ${(error as BusinessError).message}`);}})Web({ src: $rawfile('index.html'), controller: this.webviewController })}}}

欢迎大家跟我一起学习鸿蒙开发知识,加入我的班级,

华为开发者学堂

http://www.dtcms.com/a/606479.html

相关文章:

  • kotlin:if、when语句介绍
  • 扩展函数练习题
  • Java后端常用技术选型 |(一)数据库篇
  • 婚纱摄影网站应该如何做优化室内装修设计软件下载
  • 从零开始写算法——二分-寻找旋转排序数组中的最小值
  • 一站式网站建设与运营简述网站开发平台及常用工具
  • 易语言程序反编译 | 深入了解反编译技术与应用
  • 本地部署数据库管理工具 NocoDB 并实现外部访问(Linux 版本)
  • 9V-36V转3.3V4A同步降压WT6043A
  • P10668 BZOJ2720 [Violet 5] 列队春游(自己加强版) 题解
  • 学做立体书的网站wordpress小人插件
  • 网站图片地址怎么做的搜索指数的数据来源是什么
  • c# 上位机作为控制端与下位机通信方式
  • 一文了解UI自动化测试
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第三十六讲)
  • MySQL 缓存机制与查询缓存的消亡史
  • 平凡前端之路_19.数组的扩展
  • 做校园网站黑龙江建设网ca锁
  • 俞润装饰做哪几个网站杭州萧山网络
  • 平安车险官方保险网站搜索引擎网址有哪些
  • 视频sdk是什么意思?
  • CSDN在干啥?
  • 自查C语言水平
  • Kibana(版本8)
  • 华强北做电子网站贵阳网站建设哪家公司好
  • wordpress文章页怎么调用网站图片浏阳做网站推荐
  • CHDroid 安卓上的游戏ROM CHD格式转换工具软件 游戏ROM容量压缩
  • SpringCloud快速通关(下)
  • 实现简单的Springboot自动加载机制
  • 人群计数的课程学习——是否值得: