uni-app uni.canvasToTempFilePath 报 Cannot read property 'data' of undefined

uni-app uni.canvasToTempFilePath 报 Cannot read property ‘data’ of undefined

操作步骤:

  • 点击立即分享

预期结果:

  • 可以正常生成图片,保存到手机

实际结果:

  • 一直加载不会生成图片

bug描述:

  • 问题机型:红米K30s(MUI 12.5.0)以及华为EMUI11.0.0(HUAWEI Mate 30)
  • 正常机型:小米minx2s (MUI 12.0.3)以及(MUI 10点多的)都没有问题
  • 其他机型未测试
  • 问题描述:使用uni.canvasToTempFilePath生成图片的时候报TypeError: Cannot read property 'data' of undefined at view.umd.min.js:1

图片

Image 1 Image 2

开发环境 版本号 项目创建方式
Mac 3.1.13.20210514 HBuilderX
Android Android 11
小米
红米K30s

更多关于uni-app uni.canvasToTempFilePath 报 Cannot read property 'data' of undefined的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

描述的有问题:
问题机型是红米K30s(MUI 12.5.0) 以及华为EMUI11.0.0(HUAWEI Mate 30)
正常机型:小米minx2s (MUI 12.0.3)以及(MUI 10点多的)
其他机型未测试

更多关于uni-app uni.canvasToTempFilePath 报 Cannot read property 'data' of undefined的实战教程也可以访问 https://www.itying.com/category-93-b0.html


使用官方基座是否正常?

就是一些小米和华为新UI系统会出这个问题,其他时候都是正常的,MUI 12.5.0以及EMUI11.0.0有问题

部分机型的问题

回复 1***@qq.com: 之前修复过类似问题,建议使用官方基座再测试一下

这是一个典型的异步时序问题。uni.canvasToTempFilePath 在部分机型上执行速度较快,此时 canvas 绘制可能还未完成,导致 canvas 上下文数据未就绪。

建议在调用 uni.canvasToTempFilePath 前添加适当的延迟:

// 方案1:使用setTimeout确保绘制完成
setTimeout(() => {
    uni.canvasToTempFilePath({
        canvasId: 'yourCanvasId',
        success: (res) => {
            // 成功回调
        },
        fail: (err) => {
            console.error('生成图片失败:', err);
        }
    });
}, 300);

或者使用更可靠的绘制完成回调:

// 方案2:通过draw方法确保绘制完成
const ctx = uni.createCanvasContext('yourCanvasId');
ctx.draw(false, () => {
    uni.canvasToTempFilePath({
        canvasId: 'yourCanvasId',
        success: (res) => {
            // 成功回调
        }
    });
});
回到顶部