1***@163.com
1***@163.com
  • 发布:2024-12-28 10:46
  • 更新:2025-09-29 10:50
  • 阅读:816

【报Bug】 app端 webview 页面内blob下载无法正常下载

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 14.5

HBuilderX类型: 正式

HBuilderX版本号: 4.36

手机系统: 全部

手机厂商: 华为

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

测试过的手机:

iPhone12 iOS版本18.0.1 小米14

示例代码:
<web-view v-if="url" ref="webviewRef" :src="url" @message="onWebViewMessage" />

操作步骤:

app使用webview组件内嵌H5页面通过blob触发下载

预期结果:

正常下载

实际结果:

直接下载失败或下载无响应

bug描述:

app端 webview 页面内点击按钮通过blob触发下载,该H5流程在浏览器正常下载文件,安卓系统直接通知下载失败,ios点击无响应

2024-12-28 10:46 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com

plus.io.requestFileSystem里面通过writer.writeAsBinary()写入文件

z***@163.com

z***@163.com - 简单的uniapp展示

请问解决了吗

a***@fuweex.com

a***@fuweex.com

webview被嵌在App,不管是a标签,还是blob下载都受系统的影响,不会生效

需要h5通知APP,APP去下载文件,这是APP接受到h5下载通知时执行的方法

downloadFile(fileUrl) {  
                return new Promise((resolve, reject) => {  
                    uni.downloadFile({  
                        url: fileUrl,  
                        success: (res) => {  
                            let osType = uni.getStorageSync('deviceInfo').osName;  
                            let filePath = res.tempFilePath;  
                            if (osType === 'ios') {  
                                uni.openDocument({  
                                    filePath: filePath,  
                                    showMenu: true,  
                                    success: (res) => {  
                                        resolve(res);  
                                    },  
                                    fail: (err) => {  
                                        console.log('uni.openDocument--fail')  
                                        reject(err);  
                                    }  
                                });  
                            } else {  
                                uni.saveFile({  
                                    tempFilePath: filePath,  
                                    success: (fileRes) => {  
                                        uni.showToast({  
                                            icon: 'none',  
                                            mask: true,  
                                            title: '文件已保存:Android/data/uni.UNI720216F/apps/__UNI__720216F/' + fileRes.savedFilePath, //保存路径  
                                            duration: 3000,  
                                        });  
                                        setTimeout(() => {  
                                            //打开文档查看  
                                            uni.openDocument({  
                                                filePath: fileRes.savedFilePath,  
                                                success: function(res) {  
                                                    resolve(fileRes);  
                                                }  
                                            });  
                                        }, 3000)  

                                    },  
                                    fail: (err) => {  
                                        console.log('uni.save--fail')  
                                        reject(err);  
                                    }  
                                })  
                            }  
                        },  
                        fail: (err) => {  
                            console.log('uni.downloadFile--fail')  
                            reject(err);  
                        }  
                    });  
                })  

            },

要回复问题请先登录注册