更新记录
1.1.0(2026-08-13)
1、uni-app x增***eb和小程序平台的适配; 2、优化修复已知问题。
1.0.0(2026-08-13)
uniapp中,svg渲染支持全平台!uni-app X中,svg渲染支持鸿蒙、安卓、ios APP。
平台兼容性
uni-app(5.01)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
uni-app x(4.31)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ |
zmz-uts-svg
本人擅长ASCF、小程序、鸿蒙APP等开发,想合作的可以留言或者私聊!
跨端 SVG 渲染组件,UTS 标准模式。补齐 image 在 安卓/鸿蒙/IOS/ASCF/小程序等场景下的缺口。
- 支持 SVG 字符串、本地路径、
static资源、网络地址、data:image/svg+xml - 缩放模式对齐
image的mode - 符合 easycom,导入后无需
import、无需注册 - 最低 HBuilderX 4.31+(Harmony 建议 4.61+)
平台说明
插件市场详情页的「平台兼容性」以 package.json 为准。各端实现差异如下:
| 平台 | 普通 uni-app | uni-app-x |
|---|---|---|
| App-Android | uni-svg.vue + renderjs |
uni-svg.uvue + native-view + AndroidSVG |
| App-iOS | uni-svg.vue + renderjs |
uni-svg.uvue + native-view + WKWebView |
| App-Harmony | image / UTS | uni-svg.uvue + native-view + ArkUI Image |
| Web / H5 | image + SVG data URL |
image + SVG data URL |
| 小程序 | 网络地址可直出;其余转 data URL | 网络地址可直出;其余转 data URL |
普通 uni-app 没有 UniNativeViewElement,不能直接使用 native-view。UTS Android / iOS 在非 UNI-APP-X 下为占位实现,仅保证模块可编译;App 端实际走 renderjs。
安装
- 通过插件市场导入,或将
zmz-uts-svg放到项目uni_modules目录。 - 插件
components符合 easycom,页面中直接写<uni-svg>即可。
uni_modules 规范 规定:插件目录不能携带 pages.json、manifest.json、App.vue / App.uvue。若工程同时存在 uni-svg.vue 与 uni-svg.uvue,uni-app-x 建议在项目 pages.json 中显式指向 .uvue(本示例工程已这样配置):
{
"easycom": {
"autoscan": true,
"custom": {
"^uni-svg$": "@/uni_modules/zmz-uts-svg/components/uni-svg/uni-svg.uvue"
}
}
}
普通 uni-app 无需上述配置,autoscan 会使用 uni-svg.vue。
基本用法
以下示例与工程 pages/index/index 一致,覆盖三种常见 src。
uni-app-x(uvue)
<template>
<view>
<!-- SVG 字符串 -->
<uni-svg :src="logoSvg" :width="120" :height="120" mode="aspectFit"
@load="onLoad('string')" @error="onError"></uni-svg>
<!-- 本地 static -->
<uni-svg src="/static/svg-demo.svg" width="120px" height="120px" mode="aspectFit"
@load="onLoad('local')" @error="onError"></uni-svg>
<!-- 网络 SVG -->
<uni-svg src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f30d.svg"
:width="240" :height="240" mode="aspectFit"
@load="onLoad('http')" @error="onError"></uni-svg>
</view>
</template>
<script setup lang="uts">
import { ref } from 'vue'
const logoSvg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120">
<rect width="120" height="120" rx="24" fill="#2563eb"/>
<path d="M31 63l18 18 40-44" fill="none" stroke="#fff" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
</svg>`
const tip = ref('等待加载…')
function onLoad(from : string) {
tip.value = `load: ${from}`
}
function onError(e : UTSJSONObject) {
const raw = e['errMsg']
tip.value = `error: ${raw != null ? `${raw}` : 'unknown'}`
}
</script>
普通 uni-app(vue)
<template>
<uni-svg :width="120" :height="120" :src="logoSvg" mode="aspectFit" @load="onLoad" @error="onError" />
</template>
<script setup>
const logoSvg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120">
<rect width="120" height="120" rx="24" fill="#2563eb"/>
<path d="M31 63l18 18 40-44" fill="none" stroke="#fff" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
</svg>`
function onLoad() {}
function onError(e) {
console.error(e)
}
</script>
也支持:
<uni-svg :width="240" :height="160" src="/static/svg-demo.svg" />
<uni-svg width="120px" height="120px" src="https://www.w3.org/Icons/SVG/svg-logo.svg" />
<uni-svg style="width: 120px; height: 120px;" :src="dataUrl" />
请为组件设置 width / height 属性,或通过外部样式指定宽高。
属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| src | String | "" |
SVG 来源:内联 SVG 字符串 / http(s) 地址 / 本地或 /static/ 路径 / data:image/svg+xml |
| mode | String | aspectFit |
同 image:scaleToFill / aspectFit / aspectFill |
| width | Number / String | "" |
宽度。Number 单位为 rpx;String 原样使用(如 120px、100%) |
| height | Number / String | "" |
高度,规则同 width |
事件
| 事件名 | 回调参数 | 说明 |
|---|---|---|
| load | - | 渲染成功 |
| error | { errMsg: string } |
渲染失败。errMsg 常见值见下方 |
error.errMsg 常见值:
| errMsg | 含义 |
|---|---|
svg http fail |
网络请求失败 |
svg http content invalid |
响应不是合法 SVG |
svg local read fail |
本地文件读取失败 |
svg local content invalid |
本地文件内容不是合法 SVG |
svg render fail |
原生 / 视图层渲染失败 |
svg image fail |
image 回退渲染失败(Web / 小程序 / 鸿蒙) |
方法
通过 ref 获取组件实例后调用。
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| setSrc | src: string |
void | 动态设置 SVG 来源,逻辑同属性 src |
| clear | - | void | 清空当前内容 |
| reload | - | void | 重新解析并渲染当前 src |
<uni-svg ref="svgRef" :src="logoSvg" :width="120" :height="120"></uni-svg>
// uni-app / Options API
this.$refs.svgRef.setSrc(newSrc)
this.$refs.svgRef.reload()
this.$refs.svgRef.clear()
// uni-app-x script setup
const svgRef = ref(null)
svgRef.value!.setSrc(newSrc)
注意事项
-
必须使用自定义调试基座(App-iOS / Windows) 本插件含原生 UTS(
utssdk/app-ios)。官方说明:Windows 或未安装 Xcode 的 Mac 必须云打自定义调试基座。标准基座没有SvgViewByJs,会报undefined class: UTSSDKModulesSvgSvgViewByJs。 修改utssdk原生代码后,需重新制作自定义基座。 -
网络 SVG 权限 Android 插件已声明
INTERNET。Harmony / iOS 访问网络 SVG 时,请在项目manifest.json中按平台补齐网络相关配置(插件目录不能携带manifest.json)。 -
Android 依赖 uni-app-x 使用
com.caverock:androidsvg:1.4(JAR,与运行时一致)。不要再把androidsvg-aar放到libs,会与云打包自带的 JAR 冲突。Android 最低 API 21。 -
宽高 组件默认
width/height为空。未设置时依赖外部样式或父容器;建议始终显式指定,避免部分端高度为 0。 -
Gradle 无法执行 若 HBuilderX 提示 Gradle 不是可执行程序:在 设置 → 运行配置 → Android Gradle 中指定本机解压后的
gradle.bat(例如...\gradle-8.x\bin\gradle.bat),不要指向.gradle\wrapper\dists\...缓存路径。Gradle 建议 7.5–8.9.x。
常见问题
Q:运行 iOS 报 undefined class: ...SvgViewByJs?
A:当前用的是标准基座。请云打包「自定义调试基座」,运行时选择 使用自定义基座运行。
Q:本地 SVG 不显示?
A:路径需相对项目,推荐 /static/xxx.svg(与示例页一致)。确认文件确为 SVG 文本(以 <svg 或 <?xml 开头)。
Q:网络 SVG 在 Android 能显示、iOS 不能? A:iOS uni-app-x 走逻辑层请求后再交给 WKWebView;请确认自定义基座、ATS / 网络权限,以及地址返回的是 SVG 文本而非 HTML。
目录结构
uni_modules/zmz-uts-svg/
├── components/uni-svg/uni-svg.vue # 普通 uni-app easycom(renderjs)
├── components/uni-svg/uni-svg.uvue # uni-app-x(native-view)
├── utssdk/
│ ├── interface.uts
│ ├── app-android/ # UNI-APP-X: AndroidSVG;否则占位
│ ├── app-ios/ # UNI-APP-X: WKWebView;否则占位
│ ├── app-harmony/ # native-view + ArkUI Image
│ ├── app-js/
│ └── web/
├── static/demo.svg
├── index.uts
├── package.json
├── changelog.md
└── readme.md

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 0
赞赏 0
下载 12504573
赞赏 1941
赞赏
京公网安备:11010802035340号