离线包更新后白屏,怎么排查?

a'ゞ焕玲 阅读 4

我们 App 用 WebView 加载本地离线包,但最近一次发版后,部分用户更新完打开就白屏,控制台也没报错。

我试过清除缓存、重新下载离线包都不行。奇怪的是开发环境和测试包都正常,只有线上正式包有问题。是不是资源路径没对上?

离线包解压后结构是这样的:

offline/
├── index.html
├── static/
│   ├── js/app.js
│   └── css/app.css
└── config.json

index.html 里引用的路径是相对路径:<script src="./static/js/app.js"></script>,这样应该没问题吧?

我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
司徒瑞瑞
这种情况我之前也遇到过,说下我的排查思路。

首先,相对路径 "./static/js/app.js" 本身没问题,但问题很可能出在打包配置上。开发测试正常线上不行,基本就是构建产物和离线包打包流程不匹配。

几个可能的原因:

第一,看下打包工具的 publicPath 配置。如果你用的是 webpack 或 vite,默认 publicPath 可能是 "/" 或者空,但离线包加载时 webview 的根路径可能不是根目录。比如你 webview 加载的是 file:///data/data/xxx/offline/index.html,但 js 引用的是 ./static/js/app.js,浏览器会从 index.html 所在目录去找,这其实是对的。但有时候打包工具会在前面自动补路径,导致找不到。

第二,检查打包后 js/css 文件名是否带 hash。如果带了,每次发版文件名都变,但你离线包里的 index.html 引用的是旧名字。线上发版时离线包是新的,但 webview 可能缓存了旧的 index.html 或者加载顺序有问题。

第三,也是最可能的:你的离线包解压后到底放在哪,webview 加载的路径是什么。很多 App 离线包解压路径和 webview 加载路径不一致,比如解压到 /xxx/offline/,但 webview 加载的是 /xxx/offline/index.html,然后 static 目录实际在 /xxx/offline/static/,你引用的 ./static/ 能不能正确找到取决于 webview 的 baseURL 设置。

排查方法很简单:在白屏页面随便打个断点或者让客户端同学把 webview 的 URL 打印出来,看看到底加载的是什么路径。然后你本地模拟一下这个路径能不能访问到资源。

如果还不行,把你的打包配置(webpack.config.js 或 vite.config.ts)贴出来,我帮你看看 publicPath 那块。
点赞
2026-03-19 20:00