Javascript 如何测试Canvas.toBlob()是否失败
使用canvas.toBlob(callback,…),我正在将几个大的画布元素(2048x2048像素)转换为png 然而,至少在Chrome中,回调并不总是被调用。Chrome开发工具中没有生成错误 我的问题: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
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时,将其余评论作为答案发布。