往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)
介绍
在该系统中,我们支持拦截 H5 页面发出的协议请求,并通过定义相应的处理方法进行自定义处理。你可以根据需要定义协议的 scheme 和 authority,以及具体的路径(path),然后在代码中定义方法来处理这些请求
目标
我们需要拦截 H5 发出的协议(如 peakmain://page/login),并根据协议内容替换为自定义的处理方法。
协议结构
H5 协议通常包含如下格式:
scheme://authority/path
- scheme:协议类型,例如 peakmain
- authority:域名或 IP 地址
- path:资源路径,例如 /page/login
导入依赖
import { Handle, HandleMethod, HandleResult, WebUrlBean } from '@peakmain/library';
1. 定义协议的 Scheme 和 Authority
在类上添加 @Handle 装饰器来定义协议的 scheme 和 authority。
@Handle参数说明
参数 | 参数类型 | 是否必填 | 说明 |
---|---|---|---|
scheme | string | 是 | 协议类型 |
authority | string | 是 | 域名或 IP 地址 |
示例
@Handle("peakmain", "page")
export class PageHandler {
// 在这里定义方法
}
2. 定义协议的Path
在方法上添加 @HandleMethod 装饰器来指定该方法处理特定的路径
@HandleMethod 参数说明
参数 | 参数类型 | 是否必填 | 说明 |
---|---|---|---|
path | string | 是 | 资源路径 |
示例代码
@Handle("peakmain", "page")
export class PageHandler {
@HandleMethod("/login")
login(bean:WebUrlBean): HandleResult {
LogUtils.error("进入登录页面");
return HandleResult.CONSUMED; // 处理完后返回CONSUMED
}
}
3. 方法参数
WebUrlBean 是拦截协议后封装的参数,包含了协议的详细信息,传递给处理方法。
WebUrlBean 参数说明
参数 | 类型 | 说明 |
---|---|---|
scheme | string | 访问资源的协议或机制 |
authority | string | 域名或IP地址 |
path | string | 资源的具体位置或路径 |
controller | webview.WebviewController | Web的控制器,可能为空 |
context | UIContext | 上下文,可能为空 |
params | WebUrlParams|;null | H5给Native层的参数 |
WebUrlParams参数
参数 | 类型 | 说明 |
---|---|---|
callId | string | 执行的命令 |
data | object | 参数数据 |
4.返回值:HandleResult
处理方法需要返回 HandleResult 枚举值,以指示协议是否已经被处理。
返回值 | 类型 | 说明 |
---|---|---|
NOT_CONSUME | enum | 系统默认处理 |
CONSUMED | enum | 已处理,交给我们自己的处理方法 |
CONSUMING | enum | 正在处理中,暂不交给系统处理 |
示例代码
@Handle("peakmain", "page")
export class PageHandler {
@HandleMethod("/login")
login(): HandleResult {
LogUtils.error("进入登录页面");
return HandleResult.CONSUMED; // 表示我们已经处理了该请求,不交给系统继续处理
}
}
注意
实体类一定一定一定要初始化,初始化的方式有两种,
①、直接new 一个实体类,如下代码
new PageHandler()
②、通过InitUtils的initWebHandle方式初始化,如下代码
InitUtils.getInstance(this.context).init().initWebHandle(
new PageHandler(),
new UserHandler())
)