鸿蒙webview开发中web内部网络请求访问资源跨域问题,客户端解决方案

鸿蒙webview开发中web内部网络请求访问资源跨域问题,客户端解决方案

项目场景:

在鸿蒙系统的h5混合开发过程中,我们使用web组件进行混合开发,后台并未对跨域问题进行处理,web组件内部发送网络请求出现访问资源跨域问题。


问题描述

访问资源跨域是浏览器在发送网络请求时经常遇到的问题,而鸿蒙的web组件也就相当于一个浏览器,因此在web组件内部发送,也会出现跨域问题,这种问题一般需要再后台解决,但是鸿蒙官方也有提供客户端解决跨域的方案,官网:解决Web组件本地资源跨域问题-管理Web组件的网络安全与隐私-ArkWeb(方舟Web)-应用框架 - 华为HarmonyOS开发者


原因分析:

为了提高安全性,ArkWeb内核不允许file协议或者resource协议访问URL上下文中来自跨域的请求。因此,在使用Web组件加载本地离线资源的时候,Web组件会拦截file协议和resource协议的跨域访问。可以通过方法二设置一个路径列表,再使用file协议访问该路径列表中的资源,允许跨域访问本地文件。当Web组件无法访问本地跨域资源时,开发者可以在DevTools控制台中看到类似以下报错信息:

官方解决方案描述:

在鸿蒙官网,提供了两种解决方案:

一、为了使Web组件能够成功访问跨域资源,开发者应采用http或https等协议,替代原先使用的file或resource协议进行加载。其中,替代的url域名为自定义构造的仅供个人或者组织使用的域名,以避免与互联网上实际存在的域名产生冲突。同时,开发者需利用Web组件的onInterceptRequest方法,对本地资源进行拦截和相应的替换。

二、

通过设置设置一个路径列表。当使用file协议访问该列表中的资源时,允许进行跨域访问本地文件。此外,一旦设置了路径列表,file协议将仅限于访问列表内的资源(此时,fileAccess的行为将会被此接口行为覆盖)。路径列表中的路径必须符合以下任一路径格式:

1.应用文件目录通过Context.filesDir获取,其子目录示例如下:/data/storage/el2/base/files/example/data/storage/el2/base/haps/entry/files/example

2.应用资源目录通过Context.resourceDir获取,其子目录示例如下:/data/storage/el1/bundle/entry/resource/resfile/data/storage/el1/bundle/entry/resource/resfile/example

当路径列表中的任一路径不满足上述条件时,系统将抛出异常码401,并判定路径列表设置失败。若设置的路径列表为空,file协议的可访问范围将遵循fileAccess的规则。

解决方案:

由于本人在开发过程中使用到了第二种解决方案, 在这里本人提供具体的操作步骤,以及指出本人踩过的坑点。

在web组件上本使用的是  resource:// 协议去访问资源,使用如下 X:

 Web({ src: 'resource://rawfile/dist/index.html#/xxxx', controller: this.webController })

然而setPathAllowingUniversalAccess 属性需要读取的是/data/storage/el1/bundle/entry/resource/resfile目录下的文件,使用Context.resourceDir获取到的路径为空

原来是在项目创建时并不会自动生成resfile文件,需要我们手动创建,在项目的src/main/resources下新建文件夹:resfile

将打包好的dist文件,也就是h5页面文件,放在resfile文件夹下面,通过以下方法读取文件   

web({ src:'resource://resfile/dist/index.html#/xxxxxxx', controller: this.webController })

 做好以上步骤之后,就来到了解决跨域最为关键的点:

设置setPathAllowingUniversalAccess,这里需要指定解除跨域的文件

 // 在设置好setPathAllowingUniversalAccess 之后,需要将src置空,使用loadUrl加载页面 Web({ src: "", controller: this.webController }) .onControllerAttached(() => { try { // 设置允许可以跨域访问的路径列表 this.webController.setPathAllowingUniversalAccess([ // 这里获取到resfile文件目录,后边拼上自己的h5文件 getContext().resourceDir + "/dist/index.html" ]) this.webController.loadUrl('原页面路径') } catch (error) { console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); } }) .javaScriptAccess(true) .fileAccess(true) .domStorageAccess(true)

 至此即成功使用官方的第二种方法去在客户端解决咱们在鸿蒙+h5的混合开发中的h5页面跨域问题了

Read more

2026最新Python+AI入门指南:从零基础到实战落地,避开90%新手坑

2026最新Python+AI入门指南:从零基础到实战落地,避开90%新手坑

🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 【前言】 哈喽,各位想入门AI的小伙伴!随着生成式AI、大模型应用的爆发,Python+AI已成为最热门的技术组合,无论应届生求职、职场人转型还是兴趣探索,掌握这门技能都能打开新赛道。但很多新手都会陷入“先学Python还是先学AI”“数学不好能不能学”“学完不会实战”的困境。 本文结合2026年AI技术趋势,用「知识点+核心代码+流程图+表格」的形式,从零基础打通Python+AI入门全链路,聚焦热门易上手方向,全程干货,新手可直接跟着练,老司机可查漏补缺~ 一、为什么2026年入门AI,首选Python? 很多新手会问:“学AI一定要用Python吗?Java、C++不行吗?” 答案是:不是不行,但Python是效率最高、门槛最低、生态最完善的选择,

Ace-Translate:终极本地离线AI翻译工具完整使用指南

Ace-Translate:终极本地离线AI翻译工具完整使用指南 【免费下载链接】Ace-Translate关于本地离线翻译程序,支持文本翻译,下划线翻译,屏幕截图翻译,语音(音频文件)翻译,视频翻译,txt文件,PPT,Word,PDF,Excel,图片翻译。资源 项目地址: https://gitcode.com/gh_mirrors/ac/Ace-Translate 在数字化时代,语言障碍依然是许多人面临的挑战。无论是学术研究、商务交流还是内容创作,我们都需要快速、准确且安全的翻译解决方案。Ace-Translate作为一款完全本地离线的AI翻译工具,彻底摆脱了网络依赖,为您提供零延迟、高隐私的完美翻译体验。🚀 为什么选择本地离线翻译? 传统在线翻译的三大痛点: * 网络中断时的无助感:在飞机、山区或网络信号弱的环境中,传统翻译工具完全失效 * 数据安全隐忧:敏感文件上传到云端服务器,存在泄露风险 * 响应速度受限:网络延迟和服务器负载直接影响翻译效率 本地化翻译的突破性优势: * 绝对数据安全:所有翻译过程都在本地设备完成,

AI 与存储的结合:智能存储的实践与挑战

AI 与存储的结合:智能存储的实践与挑战

AI 与存储的结合:智能存储的实践与挑战 背景 作为一个专注于存储架构的技术人,我一直在关注人工智能技术的发展及其在存储领域的应用。最近团队在探索如何利用 AI 技术提升存储系统的性能和效率,遇到了许多挑战。为了帮助团队更好地理解和实践智能存储,我决定写这篇实践指南。 智能存储的概念 1. 什么是智能存储 智能存储是指利用人工智能技术(如机器学习、深度学习等)来优化存储系统的性能、可靠性和管理效率的存储解决方案。智能存储的核心特点是: * 自优化:自动优化存储配置和资源分配 * 自监控:自动监控存储系统的状态和性能 * 自修复:自动检测和修复存储系统的问题 * 预测性分析:预测存储系统的性能和容量需求 2. 智能存储的优势 * 性能提升:通过 AI 优化存储性能 * 成本降低:优化存储资源使用,降低存储成本 * 可靠性提高:预测和预防存储故障 * 管理效率:自动化存储管理,减少人工干预 3. 智能存储的挑战 * 数据质量:AI 模型需要高质量的数据进行训练 * 计算开销:AI

从零搭建可落地 Agent:一文吃透 AI 智能体开发全流程

从零搭建可落地 Agent:一文吃透 AI 智能体开发全流程

🎁个人主页:我滴老baby 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 文章目录: * 【前言】 * 一、先搞懂:2026年爆火的AI Agent,到底是什么? * 1.1 Agent的核心定义 * 1.2 Agent的4大核心能力 * 1.3 2026年Agent的3个热门落地场景 * 二、框架选型:2026年6大主流Agent框架,新手该怎么选? * 三、实战环节:从0到1搭建可落地的“邮件处理Agent”(全程代码+步骤) * 3.1 实战准备:环境搭建(10分钟搞定) * 3.1.1 安装Python环境 * 3.1.2 创建虚拟环境(避免依赖冲突) * 3.1.