uni-app 执行uni.canvasToTempFilePath报错 [object DOMException] at view.umd.min.js:1

uni-app 执行uni.canvasToTempFilePath报错 [object DOMException] at view.umd.min.js:1

开发环境 版本号 项目创建方式
Windows 10 20H2 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:windows 10 20H2

HBuilderX类型:正式

HBuilderX版本号:3.4.7

手机系统:Android

手机系统版本号:Android 9.0

手机厂商:华为

手机机型:MRD-AL00

页面类型:vue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

### 示例代码:

```javascript
uni.canvasToTempFilePath({  
    canvasId: 'screenshot',  
    success: (res) => {  
    }  
})

操作步骤:

uni.canvasToTempFilePath

预期结果:

成功

实际结果:

[object DOMException] at view.umd.min.js:1

bug描述:

执行uni.canvasToTempFilePath报错 [object DOMException] at view.umd.min.js:1 如果执行之前等待几秒,就可以执行成功,可能跟手机运行速度有关,怀疑是Canvas未完全初始化?

9 回复

能否进一步提供详细的线索


我的HBuilder是3.4.18版本的,安卓调用这个接口也会有这个问题,报错就只有这一行’[object DOMException] at view.umd.min.js:1’具体的信息也没输出

回复 松吹丶: 是否可以稳定复现?

成功解决了吗?

如描述,执行前做了延迟,就正常了

同样的问题100%复现,同样是华为手机,华为mate 40 pro
uni.canvasToTempFilePath({
canvasId: ‘screenshot’,
success: (res) => {
}
})

延迟执行也会报错

在使用 uni-app 开发时,执行 uni.canvasToTempFilePath 方法时遇到 [object DOMException] 错误,通常是由于以下原因之一引起的:

1. Canvas 未渲染完成

  • uni.canvasToTempFilePath 方法需要在 Canvas 完全渲染后才能执行。如果 Canvas 还未渲染完成,可能会导致 DOMException 错误。
  • 解决方案:确保在 Canvas 渲染完成后再调用 uni.canvasToTempFilePath。可以通过 setTimeout 延迟执行,或者监听 Canvas 的 draw 事件。
setTimeout(() => {
    uni.canvasToTempFilePath({
        canvasId: 'myCanvas',
        success: (res) => {
            console.log(res.tempFilePath);
        },
        fail: (err) => {
            console.error(err);
        }
    });
}, 1000); // 延迟 1 秒执行

2. Canvas ID 错误

  • uni.canvasToTempFilePath 方法需要指定正确的 Canvas ID。如果 ID 错误或未找到对应的 Canvas 元素,也会导致 DOMException 错误。
  • 解决方案:检查 canvasId 是否正确,并确保 Canvas 元素已经正确渲染。
<canvas canvas-id="myCanvas" style="width: 300px; height: 300px;"></canvas>
uni.canvasToTempFilePath({
    canvasId: 'myCanvas', // 确保与 canvas-id 一致
    success: (res) => {
        console.log(res.tempFilePath);
    },
    fail: (err) => {
        console.error(err);
    }
});

3. Canvas 尺寸问题

  • 如果 Canvas 的宽度或高度为 0,uni.canvasToTempFilePath 方法也会失败。
  • 解决方案:确保 Canvas 的宽度和高度不为 0,并且与样式中的尺寸一致。
<canvas canvas-id="myCanvas" style="width: 300px; height: 300px;"></canvas>

4. 跨域问题

  • 如果 Canvas 中绘制了跨域的图片资源,可能会导致 DOMException 错误。
  • 解决方案:确保图片资源是允许跨域的,或者使用本地资源。

5. 平台差异

  • 不同平台(如 H5、小程序、App)对 uni.canvasToTempFilePath 的支持可能有所不同,某些平台可能不支持某些功能。
  • 解决方案:检查当前平台的文档,确保使用的功能在该平台上是支持的。

6. 其他问题

  • 如果以上方法都无法解决问题,可以尝试更新 uni-app 版本,或者检查是否有其他代码影响了 Canvas 的渲染。

示例代码

以下是一个完整的示例代码,确保 Canvas 渲染完成后再调用 uni.canvasToTempFilePath

<template>
    <view>
        <canvas canvas-id="myCanvas" style="width: 300px; height: 300px;"></canvas>
        <button @click="saveCanvas">保存 Canvas</button>
    </view>
</template>

<script>
export default {
    methods: {
        saveCanvas() {
            setTimeout(() => {
                uni.canvasToTempFilePath({
                    canvasId: 'myCanvas',
                    success: (res) => {
                        console.log(res.tempFilePath);
                    },
                    fail: (err) => {
                        console.error(err);
                    }
                });
            }, 1000); // 延迟 1 秒执行
        }
    }
}
</script>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!