@font-face {
font-family: "hua5icon";
src:url('https://xx.xxx-xx/iconfont.woff2?t=1781155361206') format('woff2'),
url('https://xx.xxx-xx/iconfont.woff?t=1781155361206') format('woff'),
url('https://xx.xxx-xx/iconfont.ttf?t=1781155361206') format('truetype');
}
- 发布:2026-06-11 14:07
- 更新:2026-06-11 20:33
- 阅读:130
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: mac26
HBuilderX类型: 正式
HBuilderX版本号: 5.07
手机系统: HarmonyOS NEXT
手机系统版本号: HarmonyOS 6.0.0
手机厂商: 华为
手机机型: nova14
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
css 图标远程请求
@font-face {
font-family: "hua5icon";
src:url('https://xx.xxx-xx/iconfont.woff2?t=1781155361206') format('woff2'),
url('https://xx.xxx-xx/iconfont.woff?t=1781155361206') format('woff'),
url('https://xx.xxx-xx/iconfont.ttf?t=1781155361206') format('truetype');
}
运行到鸿蒙app
css 图标远程请求
@font-face {
font-family: "hua5icon";
src:url('https://xx.xxx-xx/iconfont.woff2?t=1781155361206') format('woff2'),
url('https://xx.xxx-xx/iconfont.woff?t=1781155361206') format('woff'),
url('https://xx.xxx-xx/iconfont.ttf?t=1781155361206') format('truetype');
}
运行到鸿蒙app
预期结果:
显示字体图标
显示字体图标
实际结果:
没有显示字体图标,且报 Access to font at 'https://xx.xxx-xx/iconfont.ttf' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
没有显示字体图标,且报 Access to font at 'https://xx.xxx-xx/iconfont.ttf' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
bug描述:
鸿蒙,css加载远程字体报跨域
@font-face {
font-family: "hua5icon";
src:url('https://xx.xxx-xx/iconfont.woff2?t=1781155361206') format('woff2'),
url('https://xx.xxx-xx/iconfont.woff?t=1781155361206') format('woff'),
url('https://xx.xxx-xx/iconfont.ttf?t=1781155361206') format('truetype');
}
Access to font at 'https://xx.xxx-xx/iconfont.ttf' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
2 个回复
Ask小助手
好的,作为 DCloud 官方人员,我对这个 Bug 反馈进行评审。
反馈有效性评审
这个反馈描述了一个在特定平台(鸿蒙)上通过 CSS
@font-face加载远程字体图标时遇到 CORS 跨域错误的典型问题。反馈的整体结构清晰,包含了问题描述、环境信息、代码示例和复现步骤,核心问题是明确的。不过,反馈在以下几个方面可以进一步完善:
@font-face的定义,缺少使用该字体图标的 HTML/标签部分。虽然不影响理解,但一份完整的代码片段能让复现路径更清晰。uni-app(Vue3),运行平台为鸿蒙。需要特别注意,uni-app的 Vue3 页面在 App 端(包括鸿蒙)是通过 Webview 渲染的。这个细节对分析问题至关重要。@font-face加载远程字体并直接显示,这个预期在 Web 开发中是常规操作,但在鸿蒙的 Webview 环境下,其 CORS 策略可能更为严格,因此这个预期需要结合平台特性来考量。Bug 是否成立的分析
结论:该 Bug 成立,但严格来说,这并非 uni-app 框架的缺陷,而是鸿蒙平台 Webview 的安全策略限制所导致的必然结果。
分析依据如下:
Access to font... from origin 'null' has been blocked by CORS policy是典型的浏览器/Webview 安全机制。当应用以本地文件协议(file://)加载页面时,其源(origin)为null,向远程 HTTPS 服务器请求资源(如字体文件)会触发跨域限制。https且同源)。鸿蒙 Next 作为新兴平台,其 Webview 的行为更接近现代浏览器,安全策略也更严格。origin 'null'的 CORS 报错。其最终解决方案是由后端接口去除跨域限制。这印证了在鸿蒙 Webview 环境下加载远程资源,必须由服务端解决跨域问题。@ohos.font注册本地字体文件的方式。这从侧面说明,在鸿蒙生态中,推荐或原生支持的方式是使用本地字体。解决方案建议
针对你遇到的问题,提供以下几种解决方案,推荐按优先级尝试:
【首选方案】服务端配置 CORS:这是最根本、最推荐的解决方案。你需要联系你的后端或运维同事,在提供字体文件的服务器(例如
xx.xxx-xx)上配置响应头Access-Control-Allow-Origin。*(允许所有源,但可能存在安全风险)。【备选方案】改用本地字体文件:将字体文件下载下来,放到 uni-app 项目的
static目录下,然后通过本地路径引用。这种方式性能最好,也没有跨域问题。【uni-app x 路径】使用
uni.loadFontFaceAPI:如果你使用的是 uni-app x,可以尝试用 JS API 动态加载字体,而非纯 CSS 方式。根据对话知识库中 DCloud 官方人员(OttoJi)的建议,uni-app x 相关问题建议在 HBuilderX 中提一个专门的 bug 单进行跟进。从 uni-app x 的 uni.loadFontFace 文档来看,它支持网络字体,并明确app-uvue支持的字体为ttf和otf。总结
这不是 uni-app 框架的代码错误,而是你遇到了鸿蒙平台严苛的 Webview 安全策略。你需要通过服务端配置 CORS 或改用本地文件的方式来适配这个平台特性。
DCloud_UNI_yuhe
hello , 请提供一个完整的可以复现的测试项目
要回复问题请先登录或注册
公告
更多>相关问题