Capacitor 打包后 HTML 里的本地图片为啥加载不出来? 恒菽 提问于 2026-03-01 04:57:19 阅读 6 框架 我在用 Capacitor 打包一个 Vue 项目到 Android,本地图片在浏览器里能正常显示,但打包成 App 后就变成空白了。试过把图片放 public 目录和 assets 里都不行,路径应该没错啊。 比如下面这段代码,在 Web 端没问题,但 App 里 img 标签直接没加载: <img src="/assets/logo.png" alt="logo" /> <!-- 也试过 ./assets/logo.png 和 ../assets/logo.png --> 我来解答 赞 7 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 シ梓熙 Lv1 这是典型的路径问题。Web 端跑在 http://localhost 下,/assets/logo.png 能正常解析,但打包成 App 后走的是 file:// 协议,绝对路径直接废了。 改两个地方就行。 先改 Vite 配置,把 base 设为相对路径: // vite.config.js import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], base: './', // 关键就这一行 }) 如果你用的是 Vue CLI,改 vue.config.js: // vue.config.js module.exports = { publicPath: './' } 然后图片引用方式改成这样: 或者更稳一点,用 require 或 import 的方式让打包工具自动处理路径: 改完重新 build 一遍再同步到 Android: npm run build npx cap sync android 原理就是让打包后的资源路径变成 ./assets/xxx 而不是 /assets/xxx,在 file:// 协议下才能正确找到文件。 回复 点赞 2026-03-01 08:33 加载更多 相关推荐 1 回答 11 浏览 Capacitor 打包后为什么无法访问本地 HTML 文件? 我用 Capacitor 把一个纯静态的 Vue 项目打包成 Android 应用,开发时在浏览器里一切正常,但打包安装到手机后白屏。看 Logcat 发现报错说找不到 index.html,可明明文... 含平的笔记 移动 2026-02-26 20:57:27 1 回答 23 浏览 DeskGap动态加载远程HTML页面时样式和脚本无法加载? 我在用DeskGap开发桌面应用时,想通过loadURL动态加载远程服务器的HTML页面,但发现页面样式和JS脚本都没生效。之前在主进程配置了allowRemoteContent: true,也试过设... 淑萍 框架 2026-02-16 21:14:25 2 回答 63 浏览 Capacitor相机插件拍照后如何保存到本地并显示缩略图? 在用Capacitor的Camera插件拍照后,想把照片保存到本地并显示缩略图。按照文档调用Camera.getPhoto()时设置resultType: 'dataURL',但保存到Filesyst... 皇甫鉴恒 移动 2026-02-07 14:56:28 2 回答 45 浏览 为什么Nuxt布局里的动态标题没在HTML里显示出来? 我在Nuxt3项目里设置了动态标题,但生成的HTML页面标题还是默认的"Welcome",怎么回事? 布局文件是这样写的,想根据路由参数动态生成标题,但页面加载后标题始终没变化: <templa... ♫梓涵 框架 2026-02-09 13:30:27 1 回答 4 浏览 VSCode插件中如何正确注册HTML语言的CompletionItemProvider? 我在写一个VSCode扩展,想给HTML文件添加自定义代码补全,但注册后完全没反应。是不是provider的triggerCharacters或者documentSelector写错了? 我试过用vs... 令狐焕焕 工具 2026-03-01 14:33:18 2 回答 4 浏览 Vite插件里怎么拦截并修改HTML内容? 我正在写一个Vite插件,想在开发服务器启动时动态修改index.html里的某个meta标签,但试了transformIndexHtml钩子好像没生效,控制台也不报错。 我查了文档说要用transf... Dev · 彩云 前端 2026-03-01 09:44:18 1 回答 3 浏览 React里用dangerouslySetInnerHTML怎么防XSS? 我在用 React 渲染后台返回的富文本内容,必须用 dangerouslySetInnerHTML,但担心用户输入里有恶意脚本。试过直接插入,结果页面真被注入了 alert,这咋办? 有没有轻量又靠... 设计师艺诺 安全 2026-03-01 09:42:22 1 回答 4 浏览 VSCode里Git提交时怎么忽略某个HTML文件? 我在用VSCode开发一个静态页面,每次改完代码Git都会提示我有个 index.html 被修改了,但其实这个文件是构建生成的,我不想把它提交到仓库里。我已经在 .gitignore 里加了 ind... 宇文淑萍 工具 2026-02-28 21:20:25 2 回答 11 浏览 移动端 HTML 代码混淆后页面布局错乱怎么办? 我用了一个在线混淆工具处理移动端页面的 HTML,结果页面样式全乱了,元素位置都不对。是不是混淆不该动 HTML 结构啊? 我原本的结构很简单,就一个按钮和一段提示文字,混淆后 class 名被改了,... 开发者艳艳 移动 2026-02-27 23:30:21 1 回答 14 浏览 宜搭自定义页面中如何正确引入外部HTML组件? 我在宜搭的自定义页面里想嵌入一段外部HTML结构,但直接贴进去样式全乱了,而且有些标签好像被过滤掉了。试过用iframe也不行,加载特别慢还跨域报错。 这是我想插入的代码: <div class... 上官姗姗 框架 2026-02-26 16:20:23
http://localhost下,/assets/logo.png能正常解析,但打包成 App 后走的是file://协议,绝对路径直接废了。改两个地方就行。
先改 Vite 配置,把 base 设为相对路径:
如果你用的是 Vue CLI,改
vue.config.js:然后图片引用方式改成这样:
或者更稳一点,用 require 或 import 的方式让打包工具自动处理路径:
改完重新 build 一遍再同步到 Android:
原理就是让打包后的资源路径变成
./assets/xxx而不是/assets/xxx,在file://协议下才能正确找到文件。