首页 > 其他分享 >位置、Cookie、缓存:华为鸿蒙 ArkWeb 数据管理全攻略

位置、Cookie、缓存:华为鸿蒙 ArkWeb 数据管理全攻略

时间:2024-10-21 15:17:08浏览次数:3  
标签:Web struct ... WebComponent ArkWeb 全攻略 Cookie build event

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。
主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。
本文为原创内容,任何形式的转载必须注明出处及原作者。

引言
ArkWeb 是华为鸿蒙系统提供的一个强大的 Web 应用框架,允许开发者将 Web 页面嵌入到鸿蒙应用中,并与之进行交互。它可以极大地降低开发成本,提升开发效率,并实现跨平台的 Web 应用开发。ArkWeb 支持多种使用场景,例如:

  • 应用集成 Web 页面: 应用可以在页面中使用 Web 组件,嵌入 Web 页面内容,以降低开发成本,提升开发、运营效率。
  • 浏览器网页浏览场景: 浏览器类应用可以使用 Web 组件,打开三方网页,使用无痕模式浏览 Web 页面,设置广告拦截等。
  • 小程序: 小程序类宿主应用可以使用 Web 组件,渲染小程序的页面。
    Web 组件的生命周期
    ArkWeb 的 Web 组件提供了丰富的生命周期回调接口,开发者可以通过这些接口感知 Web 组件的生命周期状态变化,并进行相关的业务处理。Web 组件的状态主要包括:
  • Controller 绑定到 Web 组件: 当 Controller 成功绑定到 Web 组件时触发该回调,推荐在此事件中注入 JS 对象、设置自定义用户代理等。
@Entry
@Component
struct WebComponent {
  // ...
  build() {
    Column() {
      Web({
        // ...
        .onControllerAttached(() => {
          // 推荐在此 loadUrl、设置自定义用户代理、注入 JS 对象等
          console.log('onControllerAttached execute');
        })
        // ...
      })
    }
  }
}
  • 网页加载开始: 网页开始加载时触发该回调,推荐在此回调中执行 JavaScript 脚本 loadUrl 等。
@Entry
@Component
struct WebComponent {
  // ...
  build() {
    Column() {
      Web({
        // ...
        .onPageBegin((event) => {
          if (event) {
            console.log('onPageBegin url:' + event.url);
          }
        })
        // ...
      })
    }
  }
}
  • 网页加载进度: 告知开发者当前页面加载的进度。
@Entry
@Component
struct WebComponent {
  // ...
  build() {
    Column() {
      Web({
        // ...
        .onProgressChange((event) => {
          if (event) {
            console.log('newProgress:' + event.newProgress);
          }
        })
        // ...
      })
    }
  }
}
  • 网页加载结束: 网页加载完成时触发该回调,推荐在此回调中执行 JavaScript 脚本。
@Entry
@Component
struct WebComponent {
  // ...
  build() {
    Column() {
      Web({
        // ...
        .onPageEnd((event) => {
          if (event) {
            console.log('onPageEnd url:' + event.url);
          }
        })
        // ...
      })
    }
  }
}
  • 页面即将可见: 在创建自定义组件的新实例后,在执行其 build 函数前执行,建议在此设置 WebDebug 调试模式、设置 Web 内核自定义协议 URL 的跨域请求与 fetch 请求的权限、设置 Cookie 等。
@Entry
@Component
struct WebComponent {
  // ...
  aboutToAppear(): void {
    try {
      webview.WebviewController.setWebDebuggingAccess(true);
    } catch (error) {
      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
    }
  }
  build() {
    Column() {
      // ...
    }
  }
}
  • 应用渲染进程异常退出: 应用渲染进程异常退出时触发该回调,可以在此回调中进行系统资源的释放、数据的保存等操作。
@Entry
@Component
struct WebComponent {
  // ...
  build() {
    Column() {
      // ...
      .onRenderExited((event) => {
        if (event) {
          console.log('onRenderExited reason:' + event.renderExitReason);
        }
      })
      // ...
    }
  }
}
  • 组件卸载消失: 组件卸载消失时触发此回调。
@Entry
@Component
struct WebComponent {
  // ...
  build() {
    Column() {
      // ...
      .onDisAppear(() => {
        promptAction.showToast({
          message: 'The web is hidden',
          duration: 2000
        });
      })
      // ...
    }
  }
}

Web 组件的性能指标
网页加载过程中需要关注一些重要的性能指标,例如 FCP(首次内容绘制)、FMP(首次有效绘制)、LCP(最大内容绘制)等。ArkWeb 提供了如下接口来通知开发者:

  • onFirstContentfulPaint: 网页首次内容绘制的回调函数。
@Entry
@Component
struct WebComponent {
  // ...
  build() {
    Column() {
      // ...
      .onFirstContentfulPaint(event => {
        if (event) {
          console.log("onFirstContentfulPaint:" + "[navigationStartTick]:" + event.navigationStartTick + ", [firstContentfulPaintMs]:" + event.firstContentfulPaintMs);
        }
      })
      // ...
    }
  }
}
  • onFirstMeaningfulPaint: 网页首次有效绘制的回调函数。
@Entry
@Component
struct WebComponent {
  // ...
  build() {
    Column() {
      // ...
      .onFirstMeaningfulPaint(event => {
        if (event) {
          console.log("onFirstMeaningfulPaint:" + "[navigationStartTick]:" + event.navigationStartTick + ", [firstMeaningfulPaintMs]:" + event.firstMeaningfulPaintMs);
        }
      })
      // ...
    }
  }
}
  • onLargestContentfulPaint: 网页绘制页面最大内容的回调函数。
@Entry
@Component
struct WebComponent {
  // ...
  build() {
    Column() {
      // ...
      .onLargestContentfulPaint(event => {
        if (event) {
          console.log("onLargestContentfulPaint:" + "[navigationStartTick]:" + event.navigationStartTick + ", [largestContentfulPaintMs]:" + event.largestContentfulPaintMs);
        }
      })
      // ...
    }
  }
}

管理位置权限
ArkWeb 提供了位置权限管理能力。开发者可以通过 onGeolocationShow() 接口对某个网站进行位置权限管理。Web 组件根据接口响应结果,决定是否赋予前端页面权限。获取设备位置,需要开发者配置 ohos.permission.LOCATION、ohos.permission.APPROXIMATELY_LOCATION、ohos.permission.LOCATION_IN_BACKGROUND,并同时在设备上打开应用的位置权限和控制中心的位置信息。

@Entry
@Component
struct WebComponent {
  // ...
  build() {
    Column() {
      // ...
      .onGeolocationShow((event) => { // 地理位置权限申请通知
        AlertDialog.show({
          title: '位置权限请求',
          message: '是否允许获取位置信息',
          primaryButton: {
            value: 'cancel',
            action: () => {
              if (event) {
                event.geolocation.invoke(event.origin, false, false); // 不允许此站点地理位置权限请求
              }
            },
          },
          secondaryButton: {
            value: 'ok',
            action: () => {
              if (event) {
                event.geolocation.invoke(event.origin, true, false); // 允许此站点地理位置权限请求
              }
            },
          },
        });
      })
      // ...
    }
  }
}

管理 Cookie 及数据存储
Cookie 是网络访问过程中,由服务端发送给客户端的一小段数据。客户端可持有该数据,并在后续访问该服务端时,方便服务端快速对客户端身份、状态等进行识别。当 Cookie SameSite 属性未指定时,默认值为 SameSite=Lax,只在用户导航到 cookie 的源站点时发送 cookie,不会在跨站请求中被发送。

@Entry
@Component
struct WebComponent {
  // ...
  build() {
    Column() {
      // ...
      Button('configCookieSync')
        .onClick(() => {
          try {
            webview.WebCookieManager.configCookieSync('https://www.example.com', 'value=test');
          } catch (error) {
            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
          }
        })
      // ...
    }
  }
}

缓存与存储管理
在访问网站时,网络资源请求是相对比较耗时的。开发者可以通过 Cache、Dom Storage 等手段将资源保存到本地,以提升访问同一网站的速度。

标签:Web,struct,...,WebComponent,ArkWeb,全攻略,Cookie,build,event
From: https://blog.csdn.net/same4869/article/details/143012697

相关文章

  • ArkWeb页面跳转与跨应用导航 - 高级应用
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。简介页面跳转是Web应用中常见......
  • cookie使用
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>cookie测试</title&g......
  • 跨越边界,融合未来:ArkWeb赋能社交应用新体验之思考
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、引言在信息爆炸的时代,用户面临着......
  • 【远程监控新体验】OpenObserve结合内网穿透无公网IP远程访问全攻略
    文章目录前言1.安装Docker2.Docker镜像源添加方法3.创建并启动OpenObserve容器4.本地访问测试5.公网访问本地部署的OpenObserve5.1内网穿透工具安装5.2创建公网地址6.配置固定公网地址前言本文主要介绍如何在Linux系统使用Docker快速本地......
  • 会话层技术-cookie
    会话层技术cookie的使用cookie拿下!packagecom.atguigu.servlet;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletR......
  • ASP.NET Core中的Cookie与Session管理:构建高效的辅助类
    Cookie和Session不一样,它们在Web开发中扮演着不同的角色,但经常协同工作以维持和管理Web应用的会话状态。以下是它们之间的主要区别和联系,以及相关的Helper工具介绍。Cookie和Session的区别存放位置:Cookie:保存在客户端的浏览器上。Session:保存在服务器端。存放形式:Coo......
  • 开源呼叫中心系统全攻略:功能、优劣与国内外市场对比
    开源呼叫中心系统全攻略:功能、优劣与国内外市场对比一、开源呼叫中心系统的核心功能开源呼叫中心系统,作为企业与外界沟通的重要桥梁,集成了多种先进功能,旨在提供高效、便捷、个性化的客户服务体验。其核心功能包括但不限于:来电与去电管理:来电管理:具备来电显示、来电转接......
  • 鸿蒙ArkWeb 组件多媒体探究:从视频到音频
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言ArkWeb是华为鸿蒙系统提供的一......
  • 设计一个可复用的 ArkWeb 基础组件架构
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言在华为鸿蒙开发环境中,ArkWeb组......
  • ArkWeb页面拦截与自定义响应 - 控制加载过程
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。简介在Web应用开发中,有时我们需要对......