拦截Web组件发起的网络请求
介绍
- 本示例通过使用SchemeHandler相关API实现对Web组件发出的请求进行拦截,并为被拦截的请求提供自定义的响应头以及响应体。
- 本工程主要实现了对以下指南文档中 https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/web/web-scheme-handler.md 示例代码片段的工程化,主要目标是实现指南中示例代码需要与sample工程文件同源。
SchemeHandlerArkts
介绍
- 本示例通过使用SchemeHandler的ArkTS相关API实现对Web组件发出的请求进行拦截,并为被拦截的请求提供自定义的响应头以及响应体。
效果预览
| 拦截web组件加载 |
|---|
![]() |
使用说明
- 用户访问网页时,组件会拦截用户请求并记录信息,根据特定条件返回自定义的HTML页面。
SchemeHandlerNdk
主页
- 本示例通过使用SchemeHandler NDK API实现对Web组件发出的请求进行拦截,并为被拦截的请求提供自定义的响应头以及响应体。
效果预览
| 主页 |
|---|
![]() |
使用说明
- 打开DEMO进入首页,展示html。
- 点击各链接进入不同属性的拦截结果页面或读取结果页面。
拦截视频资源
介绍
- 此处模块主要介绍通过Web组件,拦截视频资源请求,读取本地mp4文件。
效果预览
| 拦截视频资源 |
|---|
![]() |
使用说明
- 通过点击主页的“拦截视频资源请求,读取本地mp4文件”链接,拦截页面请求并跳转到此页面并展示本地的mp4文件。
忽略csp检查并拦截
介绍
- 此处模块主要介绍通过Web组件,测试三方协议忽略csp检查,并成功拦截。
效果预览
| 忽略csp检查并拦截 |
|---|
![]() |
使用说明
- 通过点击主页的“测试三方协议忽略csp检查,并成功拦截”链接,展示被拦截的自定义scheme请求,该scheme需要遵循标准的scheme规则,允许忽略CSP检查。
- 如果要拦截自定义scheme的请求,需要提前将自定义scheme注册到Web内核。需要在Web组件初始化之前进行注册,Web组件初始化后再注册会失败。
拦截ISOLATED属性
介绍
- 此处模块主要介绍通过Web组件,测试拦截设置ISOLATED属性的三方协议。
效果预览
| 拦截ISOLATED属性 |
|---|
![]() |
使用说明
- 通过点击主页的“测试拦截设置ISOLATED属性的三方协议”链接,展示被拦截的带有ISOLATED属性的自定义scheme请求,该scheme的请求必须从相同scheme加载的网页中发起。
- 如果要拦截自定义scheme的请求,需要提前将自定义scheme注册到Web内核。需要在Web组件初始化之前进行注册,Web组件初始化后再注册会失败。
拦截LOCAL属性
介绍
- 此处模块主要介绍通过Web组件,测试拦截设置LOCAL属性的三方协议。
效果预览
| 拦截LOCAL属性 |
|---|
![]() |
使用说明
- 通过点击主页的“测试拦截设置LOCAL属性的三方协议”链接,展示被拦截的带有LOCAL属性的自定义scheme请求,该scheme需要遵循与“file” scheme一样的规则。
- 如果要拦截自定义scheme的请求,需要提前将自定义scheme注册到Web内核。需要在Web组件初始化之前进行注册,Web组件初始化后再注册会失败。
拦截service worker
介绍
- 此处模块主要介绍通过Web组件,测试拦截service worker触发的请求。
效果预览
| 拦截service worker |
|---|
![]() |
使用说明
- 通过点击主页的“测试拦截service worker触发的请求”链接,展示被拦截的Web组件发出的scheme为“custom”的请求。
- 如果要拦截自定义scheme的请求,需要提前将自定义scheme注册到Web内核。需要在Web组件初始化之前进行注册,Web组件初始化后再注册会失败。
测试读取blob类型http body stream
介绍
- 此处模块主要介绍通过Web组件,测试读取blob类型http body stream。
效果预览
| 测试读取blob类型http body stream |
|---|
![]() |
使用说明
- 通过点击主页的“测试读取blob类型http body stream”链接,跳转至post_data.html,通过"test xhr post"或"test xhr put"按键,创建blob类型的对应请求,并发送至服务端,在设备日志中可查看发送结果。
测试读取chunked类型http body stream
介绍
- 此处模块主要介绍通过Web组件,测试读取chunked类型http body stream。
效果预览
| 测试读取chunked类型http body stream |
|---|
![]() |
使用说明
- 通过点击主页的“测试读取chunked类型http body stream”链接,跳转至pchunked_post_stream.html,通过"test post chunked http body"按键,创建chunked类型的请求,并以POST方式发送至服务端,在设备日志中可查看发送结果。
工程目录
├── entry
│ └── src
│ └── main
│ ├── cpp // C++代码区
│ │ ├── CMakeLists.txt // CMAKE配置文件
│ │ ├── hello.cpp // Native业务代码实现
│ │ ├── rawfile_request.cpp // RawfileRequest实现
│ │ ├── rawfile_request.h // RawfileRequest类
│ │ └── types
│ │ └── libentry // C++接口导出
│ │ ├── Index.d.ts
│ │ └── oh-package.json5
│ ├── ets // ArkTS代码区
│ │ ├── entryability
│ │ │ └── EntryAbility.ets // 入口类
│ │ ├── entrybackupability
│ │ │ └── EntryBackupAbility.ets // 备份恢复框架
│ │ └── pages
│ │ └── Index.ets // 主页
| | |── SchemeHandlerArkts.ets
| | |── SchemeHandlerNdk.ets
│ └── resources // 应用资源文件
具体实现
- 本示例通过使用SchemeHandler相关API实现对Web组件发出的请求进行拦截,并为被拦截的请求提供自定义的响应头以及响应体。
- 为Web组件设置SchemeHandler:通过SchemeHandler拦截Web组件或者ServiceWorker发出的HTTP(s)或者自定义协议的请求。Ndk源码参考hello.cpp,ArkTS源码参考SchemeHandlerArkts.ets
- 获取被拦截请求的信息:在请求开始的回调中,应用可以获取请求的基本信息。Ndk源码参考rawfile_request.cpp,ArkTS源码参考SchemeHandlerArkts.ets
- 拦截Web内核的请求,并为被拦截的请求提供自定义的响应体:网络拦截支持在worker线程以流方式为被拦截的请求提供自定义的响应体。Ndk源码参考rawfile_request.cpp,ArkTS源码参考SchemeHandlerArkts.ets
相关权限
依赖
不涉及。
约束与限制
- 本示例仅支持标准系统上运行,支持设备:RK3568。
- 本示例支持API14版本SDK,SDK版本号(API Version 14 Release)。
- 本示例需要使用DevEco Studio 版本号(5.0.1Release)才可编译运行。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo code/DocsSample/ArkWeb/ArkWebSchemeHandler > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master








