一、问题背景
之前一直在做一个网页项目,因业务展示需要打包成 APP 使用。
在鸿蒙 4.2 时期,通过安卓 WebView 套壳 APP 修改 URL 即可运行,流程简单且稳定。
二、问题爆发:升级 HarmonyOS NEXT 后异常
近期更换新手机并升级至 HarmonyOS NEXT 系统后,兼容运行的旧版壳子出现严重问题。
❗ 文件上传功能失效
具体表现为:
<input type="file">按钮可点击- ❌ 无法调用相机拍照
- ✅ 仅支持从本地相册选择图片
业务场景需要现场拍照上传,此限制导致方案不可用。
三、原因分析
经排查与验证,主要原因如下:
👉 鸿蒙 NEXT 出于隐私安全考虑:
- 不再允许 WebView 直接调用系统相机
- H5 的文件选择需要宿主应用手动拦截
- 由原生代码调起相机/相册,拿到结果后回传给网页
简言之,以前安卓是自动处理,现在鸿蒙要求开发者自行实现完整流程。
四、尝试过的方案
方案 1:找现成鸿蒙 WebView 套壳
结论:❌ 未找到可用方案。要么不支持文件上传回调,要么非鸿蒙 NEXT 原生。
方案 2:反编译原安卓壳子修改
思路:修改 WebView 相关代码及文件选择逻辑。 问题:❌ 操作繁琐,且存在编译失败风险。
方案 3:前端绕过(JS 调相机)
问题:❌ 若壳子无权限,H5 API 同样无效。
五、解决方案:原生 ArkTS 套壳
为适应频繁的功能迭代与实时验证需求,决定采用 ArkTS 编写 HarmonyOS NEXT 原生 WebView 套壳应用。
核心功能
- ✅ WebView 全屏加载网页
- ✅ 支持 JS / DOM Storage / 图片访问
- ✅ 文件上传支持(相机 + 相册)
- ✅ 返回键拦截(网页返回 + 双击退出)
- ✅ 启动页(Splash)
- ✅ 权限自动申请(相机 / 相册)
- ✅ 沉浸式体验(隐藏导航条)
关键修复
重点解决了文件上传问题,补齐了'WebView → 原生 → 相机 → 回传'的逻辑链路,实现正常拍照与相册选择上传。
六、总结
鸿蒙 NEXT 对安全策略收紧,开发成本有所上升,但权限更清晰、行为更可控。通过原生层补全逻辑,可有效解决 WebView 在文件交互上的限制。


