首页 > 其他分享 >AtomicServiceWeb 使用方法

AtomicServiceWeb 使用方法

时间:2024-12-18 09:35:01浏览次数:10  
标签:src State param AtomicServiceWebController controller 使用 AtomicServiceWeb 方法

AtomicServiceWeb 使用方法全解析

一、整体概述

AtomicServiceWeb 是对 Web 组件的升级,用于在特定场景下实现更高效和功能丰富的网页交互。它在一些接口和属性的使用上与 Web 组件有所不同,需要开发者按照新的规范进行操作。

二、参数传递

  1. 通过 src 传递参数

    • 适用场景:例如在登录认证场景中,将元服务原生页面获取的登录参数传递给 H5 页面。

    • 传参格式:在设置src属性时,将参数添加到 URL 中,如src = https://xx.com/login?authcode=${authcode}``,其中authcode是要传递的参数。

    • 示例代码

      • login.ets中:
import { authentication } from '@kit.AccountKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { AtomicServiceWeb, AtomicServiceWebController } from '@kit.ArkUI';
@Entry
@Component
struct LoginPage {
    @State authorizationCode: string = '';
    @State src: ResourceStr = 'resource://rawfile/login.html';
    @State controller: AtomicServiceWebController = new AtomicServiceWebController();
    navPathStack: NavPathStack = new NavPathStack();
    async getAuthorizationCode() {
        // 创建登录请求并获取授权码的逻辑
    }
    async aboutToAppear() {
        await this.getAuthorizationCode();
    }
    build() {
        NavDestination() {
            if (this.authorizationCode) {
                AtomicServiceWeb({
                    src: this.src + `?AuthorizationCode=${this.authorizationCode}`,
                    navPathStack: this.navPathStack,
                    controller: this.controller
                })
            }
        }
           .onReady((context: NavDestinationContext) => {
                this.navPathStack = context.pathStack;
            })
    }
}
@Builder
export function AtomicServiceWebPageBuilder(name: string, param: Object) {
    LoginPage()
}
  • login.html中,可以通过window.location.href获取 URL 中的参数:
<!DOCTYPE html>
<html>
<style>
    body {
        padding-left: 30px;
    }
    h1 {
        font-size: 100px;
    }
   .button {
        font-size: 80px;
        margin: 8px 0px;
        padding: 8px 15px;
        border-radius: 10px;
        color: #fff;
        background-color: #007bff;
        border-color: #007bff;
        border: 1px solid transparent;
    }
   .button_error {
        color: #fff;
        background-color: #dc3545;
        border-color: #dc3545;
    }
</style>
<body>
<h1>H5 Page</h1>
<br/>
<button type="button" class="button" onclick="getUrlParams()">获取AuthorizationCode参数</button>
<p id="demo"></p>
<script src="../dist/asweb-sdk.umd.js"></script>
<script>
    function getUrlParams() {
        const params = {};
        const url = window.location.href;
        const urlObj = new URL(url);
        for (const [key, value] of urlObj.searchParams.entries()) {
            params[key] = value;
            document.getElementById("demo").innerHTML = params[key];
        }
        return params;
    }
</script>
</body>
</html>
  1. 通过路由传参

    • 适用场景:常见于 H5 跳转原生页面实现账号关联、调用原生实名认证等能力时传递参数。

    • 传参格式:使用has.router.pushPath('LoginPage','xxxxx'),其中LoginPage是目标页面,xxxxx是要传递的参数。

    • 示例代码

      • login.html中:
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<style>
    body {
        padding-left: 30px;
    }
    h1 {
        font-size: 100px;
    }
   .button {
        font-size: 80px;
        margin: 8px 0px;
        padding: 8px 15px;
        border-radius: 10px;
        color: #fff;
        background-color: #007bff;
        border-color: #007bff;
        border: 1px solid transparent;
    }
   .button_error {
        color: #fff;
        background-color: #dc3545;
        border-color: #dc3545;
    }
</style>
<body>
<h1>H5 Page</h1>
<br/>
<button type="button" class="button" onclick="pushPath('LoginPage', 'xxxxx')">H5传递参数</button>
<p id="demo"></p>
<script src="../dist/asweb-sdk.umd.js"></script>
<script>
    function pushPath(name, param, animated, onPop) {
        has.navPathStack.pushPath({
            name: name,
            param: param,
            animated: animated,
            onPop: onPop,
            callback: (err, res) => commonCallback('pushPath', err, res)
        });
    }
    let onPop = event => {
        consoleLog('pushPath onPop event=' + JSON.stringify(event));
    };
</script>
</body>
</html>
  • LoginPage.ets中接收参数:
import { AtomicServiceWeb, AtomicServiceWebController } from '@kit.ArkUI';
@Entry
@Component
struct LoginPage {
    @State src: ResourceStr = 'resource://rawfile/login.html';
    @State param: object | string = '';
    @State controller: AtomicServiceWebController = new AtomicServiceWebController();
    navPathStack: NavPathStack = new NavPathStack();
    build() {
        NavDestination() {
            if (this.param) {
                Column() {
                    Text(`接收H5页面传递参数:${this.param}`)
                }
                   .width('100%')
            } else {
                AtomicServiceWeb({
                    src: this.src,
                    navPathStack: this.navPathStack,
                    controller: this.controller
                })
            }
        }
           .onReady((context: NavDestinationContext) => {
                this.navPathStack = context.pathStack;
                this.param = context.pathInfo?.param as string
            })
    }
}
@Builder
export function AtomicServiceWebPageBuilder(name: string, param: Object) {
    LoginPage()
}
  • MainPage.ets中创建路由跳转:
@Entry
@Component
struct MainPage {
    navPathStack: NavPathStack = new NavPathStack();
    @Builder
    NavPathStackComponent(name: string, page: string, param?: object): void {
        Button(name)
           .type(ButtonType.Capsule)
           .width('60%')
           .margin({
                top: '50px'
            }).onClick(() => {
            this.navPathStack.pushPath({
                name: page,
                param: param
            });
        })
    }
    build() {
        Navigation(this.navPathStack) {
            Row() {
                Column() {
                    this.NavPathStackComponent('LoginPage', 'LoginPage')
                }.width('100%')
            }.height('100%')
        }.title('XXX')
    }
}

同时需要在route_map.json中添加对应路由:

{
    "name": "LoginPage",
    "pageSourceFile": "src/main/ets/pages/LoginPage.ets",
    "buildFunction": "AtomicServiceWebPageBuilder",
    "data": {
        "description": "this is LoginPage"
    }
}

三、常用接口 / 属性迁移

  1. controller
    • 使用说明:使用AtomicServiceWebController替换原来的控制器。
    • 示例代码
import { AtomicServiceWeb, AtomicServiceWebController } from '@kit.ArkUI';
@Entry
@Component
struct WebComponent {
    @State controller: AtomicServiceWebController = new AtomicServiceWebController();
    build() {
        Column() {
            AtomicServiceWeb({
                src: 'www.example.com',
                controller: this.controller
            })
        }
    }
}
  1. javaScriptAccess
    • 使用说明:默认值为true,无需单独设置。
  2. domStorageAccess
    • 使用说明:默认值为true,无需单独设置。
  3. mixedMode
    • 使用说明:可以设置为MixedMode.All等模式,示例如下:
import { AtomicServiceWeb, AtomicServiceWebController } from '@kit.ArkUI';
@Entry
@Component
struct WebComponent {
    @State controller: AtomicServiceWebController = new AtomicServiceWebController();
    @State mixedMode: MixedMode = MixedMode.All;
    build() {
        Column() {
            AtomicServiceWeb({
                src: 'www.example.com',
                controller: this.controller,
                mixedMode: this.mixedMode
            })
        }
    }
}
  1. darkMode
    • 使用说明:可以设置为WebDarkMode.On等模式,示例如下:
import { AtomicServiceWeb, AtomicServiceWebController } from '@kit.ArkUI';
@Entry
@Component
struct WebComponent {
    @State controller: AtomicServiceWebController = new AtomicServiceWebController();
    @State mode: WebDarkMode = WebDarkMode.On;
    build() {
        Column() {
            AtomicServiceWeb({
                src: 'www.example.com',
                controller: this.controller,
                darkMode: this.mode,
            })
        }
    }
}
  1. forceDarkAccess
    • 使用说明:设置为truefalse来控制是否启用强制黑暗模式,示例如下:
import { AtomicServiceWeb, AtomicServiceWebController } from '@kit.ArkUI';
@Entry
@Component
struct WebComponent {
    @State controller: AtomicServiceWebController = new AtomicServiceWebController();
    @State access: boolean = true;
    build() {
        Column() {
            AtomicServiceWeb({
                src: 'www.example.com',
                controller: this.controller,
                forceDarkAccess: this.access
            })
        }
    }
}
  1. fileAccess
    • 使用说明:在 AtomicServiceWeb 中默认值为false,仅只读资源目录/data/storage/el1/bundle/entry/resources/resfile里面的file协议资源可访问,$rawfile(filepath/filename)rawfile路径的文件不受影响。升级后不再支持自定义该接口,需删除相关设置代码。
  2. onlineImageAccess 和 imageAccess
    • 使用说明:在 AtomicServiceWeb 中默认值为True,升级后不再支持自定义这两个接口,需删除相关设置代码。
  3. geolocationAccess
    • 使用说明:升级后不再支持该接口,在 H5 页面中可替换使用has.location.getLocation()

标签:src,State,param,AtomicServiceWebController,controller,使用,AtomicServiceWeb,方法
From: https://www.cnblogs.com/hongmengos/p/18613906

相关文章

  • 鸿蒙Flutter环境相关问题解决方法
    鸿蒙Flutter环境相关问题建议使用的开发工具版本flutter3.7.12-ohos版本python3.8-python3.11java17node18ohpm1.6+HamonyOSSDKapi11Xcode14.3断网环境flutterpubget执行失败解决方案:加上--offline参数,完整命令flutterpubget--offlinemac环境releas......
  • Flex 组件的简略使用
    鸿蒙Next中Flex组件的简略使用方法在鸿蒙Next开发中,Flex组件是一种强大的布局工具,用于以弹性方式布局子组件。以下是其简略使用方法。1.基本概念Flex组件从APIVersion7开始支持,在渲染时有二次布局过程。其主轴默认撑满父容器,与Column、Row组件有所不同。2.子......
  • AlertDialog的简易使用
    警告弹窗(AlertDialog)使用文档一、概述警告弹窗(AlertDialog)用于向用户显示重要信息或获取用户的确认反馈。它从APIVersion7开始支持,在元服务中从APIversion11开始支持,其功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用(从APIversion10开始,可通过UIContext......
  • 【必看】内外网文件传输方法大全 看看哪个适合你!
    一、内外网文件传输的核心需求内外网文件传输的核心需求可以归纳为安全性、效率、合规性、兼容性、权限控制、自动化、部署灵活性和成本控制。企业应根据自身业务需求和安全策略,选择合适的解决方案来满足这些核心需求,实现高效、安全、合规的数据交换。二、内外网文件传输的方法......
  • SpringCloud 使用 OpenFeign
    一、为什么使用OpenFeign在SpringCloud中,使用OpenFeign主要是为了简化微服务之间的通信,特别是在服务调用的过程中。OpenFeign是一个声明式的Web服务客户端,它能够通过简单的注解方式,快速构建RESTful风格的HTTP请求。具体来说,使用OpenFeign的原因包括以下几个方面:......
  • 变量a使用了一段内存,变量b也和a使用了相同的内存,如果b把这段内存释放了,a将变为悬空指
    在C++中,如果两个变量(a 和 b)指向同一段内存,并且其中一个变量(如 b)释放了这段内存,那么这段内存就被标记为可供系统重用的空闲内存。此时另一个变量(a)依然保留原有的指针,但它指向的内存已经被释放,成为 悬空指针(danglingpointer)。关键问题内存释放后的行为如果 b 调用了......
  • Windows ANSI API 是指 Windows 操作系统 提供的一组 应用程序编程接口 (API),它们使用
    WindowsANSIAPI是指Windows操作系统提供的一组应用程序编程接口(API),它们使用ANSI字符集来处理字符串和文本数据。ANSI字符集是较为老旧的字符编码标准,通常对应的是Windows-1252编码(又称Latin-1)。这些API主要用于与字符串和字符数据交互。1. WindowsANSI......
  • 使用pjsip封装自定义软电话sdk
    环境:window10_x64&vs2022pjsip版本:2.14.1python版本:3.9.13近期有关于windows环境下软电话sdk开发的需求,需要开发动态库给上层应用调用,今天整理下使用pjsip封装简单的自定义软电话sdk笔记,并提供相关资源下载。我将从以下几个方面展开:功能说明接口设计接口实现接口调用......
  • 关于C语言中指针的使用的练习
    #include<stdio.h>#include<stdlib.h>intmain(){char*arr=NULL;intsize,new_size;//动态分配初始内存printf("Entertheinitialsizeofthearray:");scanf("%d",&size);arr=(char*)malloc(s......
  • C语言关于return在循环语句中的使用(求一个数是否为素数的过程中的思考)
    intjk(inta)//定义一个jk函数判断a是否是素数,是返回1,不是则返回0.{ inti;if(a<2){return0;} elseif(a==2) { return1; } else { for(i=2;i<=a-1;i++) { if(a%i==0) { return0; } } return1; } }intmain(......