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
图片

| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| 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
描述的有问题:
问题机型是红米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) => {
// 成功回调
}
});
});

