Javascript 如何测试Canvas.toBlob()是否失败

Javascript 如何测试Canvas.toBlob()是否失败,javascript,canvas,html5-canvas,Javascript,Canvas,Html5 Canvas,使用canvas.toBlob(callback,…),我正在将几个大的画布元素(2048x2048像素)转换为png 然而,至少在Chrome中,回调并不总是被调用。Chrome开发工具中没有生成错误 我的问题: 除了在x秒后超时外,还有什么方法可以检查toBlob()是否失败 toBlob()在哪些条件下会失败?如何知道未满足哪一条件/如何获取错误消息 我正在使用的代码: function trigger_browser_download(blob, fileName) { "use st

使用canvas.toBlob(callback,…),我正在将几个大的画布元素(2048x2048像素)转换为png

然而,至少在Chrome中,回调并不总是被调用。Chrome开发工具中没有生成错误

我的问题:

  • 除了在x秒后超时外,还有什么方法可以检查toBlob()是否失败
  • toBlob()
    在哪些条件下会失败?如何知道未满足哪一条件/如何获取错误消息

  • 我正在使用的代码:

    function trigger_browser_download(blob, fileName) { "use strict";
        var url = window.URL.createObjectURL(blob);
        a.href = url;
        a.download = fileName;
        a.click();
        window.URL.revokeObjectURL(url);
    };
    
    function download_canvas(canvas, filename) { "use strict";
        canvas.toBlob(function(blob) {
            debugger; // not always reached
            if(blob instanceof Blob) {
                trigger_browser_download(blob, filename);
            } else {
                console.error("error generating blob");
            }
        }, 'application/octet-binary'); 
    }
    
    for(var i = 0; i < 10; ++i) {
        var canvas = document.createElement('canvas');
        canvas.height = 2048;
        canvas.width = 2048;
        download_canvas(canvas, i + ".png");
    
    }
    
    函数触发器\浏览器\下载(blob,文件名){“使用严格”;
    var url=window.url.createObjectURL(blob);
    a、 href=url;
    a、 下载=文件名;
    a、 单击();
    window.URL.revokeObjectURL(URL);
    };
    函数下载_canvas(canvas,filename){“严格使用”;
    canvas.toBlob(函数(blob){
    调试器;//不总是到达
    if(blob实例为blob){
    触发浏览器下载(blob,文件名);
    }否则{
    console.error(“生成blob的错误”);
    }
    }“应用程序/八位二进制”);
    }
    对于(变量i=0;i<10;++i){
    var canvas=document.createElement('canvas');
    canvas.height=2048;
    画布宽度=2048;
    下载_canvas(canvas,i+“.png”);
    }
    
    真的很难说。如果不强制MIME类型,是否也会发生这种情况?通常会导致失败的是错误的参数和受污染的画布,在这两种情况下,调用toBlob时都会抛出错误。@kaido感谢您的建议。删除MIME类型没有帮助。经过一些调查,我怀疑这是Chrome中的一个bug:toBlob、调试器和事件循环之间似乎存在连接。在
    download\u canvas
    旁边设置断点时会出现问题。当调用
    下载\u canvas
    后紧接着返回语句时,不会出现这种情况…@kaido您可以在回答上面的问题2时,将其余评论作为答案发布。