铁血鸿蒙之HarmonyOS NEXT了解

HarmonyOS开发工具、语言与框架介绍

一、工具及语言

  1. DevEco Studio(集成开发环境(IDE,https://developer.huawei.com/consumer/cn/deveco-studio/)

  2. ArkTS是鸿蒙生态的应用开发语言

    保持TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序运行之前的开发期能检测更多错误,提升代码健壮性,并实现更好的运行性能。同时,提供了声明式UI范式、状态管理支持等相应的能力,让开发者可以以更简洁、更自然的方式开发高性能应用。

    // Index.ets
    @Entry
    @Component
    struct Index {
      @State message: string = 'Hello World'
    
      build() {
        Row() {
          Column() {
            Text(this.message)
              .fontSize(50)
              .fontWeight(FontWeight.Bold)
          }
          .width('100%')
        }
        .height('100%')
      }
    }
    

二、ArkUI开发框架及(方舟Web)

  1. ArkUI

    ArkUI是一套构建分布式应用界面的声明式UI开发框架。它使用简洁的UI信息语法、丰富的UI组件、以及实时界面预览工具,帮助您提升HarmonyOS应用界面开发效率30%。您只需使用一套ArkTS API,就能在多个HarmonyOS设备上提供生动而流畅的用户界面体验。(https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkui-overview-V5)

  2. ArkWeb(方舟Web)

    ArkWeb(方舟Web)提供了Web组件,用于在应用程序中显示Web页面内容。常见使用场景包括:
    应用集成Web页面:应用可以在页面中使用Web组件,嵌入Web页面内容,以降低开发成本,提升开发、运营效率。
    浏览器网页浏览场景:浏览器类应用可以使用Web组件,打开三方网页,使用无痕模式浏览Web页面,设置广告拦截等。
    小程序:小程序类宿主应用可以使用Web组件,渲染小程序的页面。
    生命周期:
    在这里插入图片描述

    // xxx.ets
    import { webview } from '@kit.ArkWeb';
    import { BusinessError } from '@kit.BasicServicesKit';
    import { promptAction } from '@kit.ArkUI';
    
    @Entry
    @Component
    struct WebComponent {
      controller: webview.WebviewController = new webview.WebviewController();
      responseWeb: WebResourceResponse = new WebResourceResponse();
      heads: Header[] = new Array();
      @State webData: string = "<!DOCTYPE html>\n" +
        "<html>\n" +
        "<head>\n" +
        "<title>intercept test</title>\n" +
        "</head>\n" +
        "<body>\n" +
        "<h1>intercept test</h1>\n" +
        "</body>\n" +
        "</html>";
    
      aboutToAppear(): void {
        try {
          webview.WebviewController.setWebDebuggingAccess(true);
        } catch (error) {
          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
        }
      }
    
      build() {
        Column() {
          Web({ src: $rawfile('index.html'), controller: this.controller })
            .onControllerAttached(() => {
              // 推荐在此loadUrl、设置自定义用户代理、注入JS对象等
              console.log('onControllerAttached execute')
            })
            .onLoadIntercept((event) => {
              if (event) {
                console.log('onLoadIntercept url:' + event.data.getRequestUrl())
                console.log('url:' + event.data.getRequestUrl())
                console.log('isMainFrame:' + event.data.isMainFrame())
                console.log('isRedirect:' + event.data.isRedirect())
                console.log('isRequestGesture:' + event.data.isRequestGesture())
              }
              // 返回true表示阻止此次加载,否则允许此次加载
              return true
            })
            .onOverrideUrlLoading((webResourceRequest: WebResourceRequest) => {
              if (webResourceRequest && webResourceRequest.getRequestUrl() == "about:blank") {
                return true;
              }
              return false;
            })
            .onInterceptRequest((event) => {
              if (event) {
                console.log('url:' + event.request.getRequestUrl());
              }
              let head1: Header = {
                headerKey: "Connection",
                headerValue: "keep-alive"
              }
              let head2: Header = {
                headerKey: "Cache-Control",
                headerValue: "no-cache"
              }
              let length = this.heads.push(head1);
              length = this.heads.push(head2);
              this.responseWeb.setResponseHeader(this.heads);
              this.responseWeb.setResponseData(this.webData);
              this.responseWeb.setResponseEncoding('utf-8');
              this.responseWeb.setResponseMimeType('text/html');
              this.responseWeb.setResponseCode(200);
              this.responseWeb.setReasonMessage('OK');
              // 返回响应数据则按照响应数据加载,无响应数据则返回null表示按照原来的方式加载
              return this.responseWeb;
            })
            .onPageBegin((event) => {
              if (event) {
                console.log('onPageBegin url:' + event.url);
              }
            })
            .onFirstContentfulPaint(event => {
              if (event) {
                console.log("onFirstContentfulPaint:" + "[navigationStartTick]:" +
                event.navigationStartTick + ", [firstContentfulPaintMs]:" +
                event.firstContentfulPaintMs);
              }
            })
            .onProgressChange((event) => {
              if (event) {
                console.log('newProgress:' + event.newProgress);
              }
            })
            .onPageEnd((event) => {
              // 推荐在此事件中执行JavaScript脚本
              if (event) {
                console.log('onPageEnd url:' + event.url);
              }
            })
            .onPageVisible((event) => {
              console.log('onPageVisible url:' + event.url);
            })
            .onRenderExited((event) => {
              if (event) {
                console.log('onRenderExited reason:' + event.renderExitReason);
              }
            })
            .onDisAppear(() => {
              promptAction.showToast({
                message: 'The web is hidden',
                duration: 2000
              })
            })
        }
      }
    }
    
  3. 更多精彩(https://developer.huawei.com/consumer/cn/develop/)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值