HTML打包APK中的文件下载功能详解
近期有开发者反馈,在使用HTML 一键打包APK工具开发离线版APP时,文件下载功能无法正常生效。经过详细排查,问题主要出现在下载代码中对 Blob 数据处理的机制上。
HTML打包APK相关链接
问题定位
在HTML源码中,文件下载功能的实现代码如下:
// 此代码在PC浏览器中正常,但在打包后的APP中失效
dom.downloadBtn.onclick = () => {
const a = document.createElement('a');
a.href = URL.createObjectURL(finalPdfBlob);
a.download = `文件_${new Date().getTime()}.pdf`;
a.click();
};
上述实现依赖于浏览器将 Blob 数据转换为 URL,然后通过模拟点击链接方式触发文件下载。这在普通浏览器上能正常工作,但在打包后的APP中,由于 APK 内部使用Java层的 DownloadManager,而 Blob URL 仅存在于 JavaScript 引擎的内存中,导致 Java层无法访问该地址,进而无法触发下载动作。
问题修复
问题的解决方案比较简单,即修改代码,将 Blob 数据转为 Data URL,这样 Java 层即可获取对应数据。以下是对比代码: