我正在使用FileSaver.js文件将画布保存为图像。下载完成后,我必须关闭窗口。有没有办法实现这一点?
以下是我尝试过的代码:
canvas.toBlob(function (blob) {
saveAs(blob, "RQGantt.png");
window.close();
});
当使用小尺寸的图像时,它可以正常工作。但是当我使用大尺寸的图像时,在开始下载之前我的窗口就关闭了。
有没有办法在客户端解决这个问题?
我正在使用FileSaver.js文件将画布保存为图像。下载完成后,我必须关闭窗口。有没有办法实现这一点?
以下是我尝试过的代码:
canvas.toBlob(function (blob) {
saveAs(blob, "RQGantt.png");
window.close();
});
当使用小尺寸的图像时,它可以正常工作。但是当我使用大尺寸的图像时,在开始下载之前我的窗口就关闭了。
有没有办法在客户端解决这个问题?
这是他们对https://github.com/eligrey/FileSaver.js/issues/52问题提供的回应。
不幸的是,JS无法知道文件何时保存完成,因此用户必须关闭可能因保存内容而打开的新标签页。
因此,我制作了以下解决方法。
window.onbeforeunload = function () {
//For IE
if (HTMLCanvasElement.prototype.msToBlob && window["ganttBlob"])
saveAs(ganttBlob, "imageName.png");
}
canvas.toBlob(function (blob) {
window.ganttBlob = blob;
// For Non IE Browser
if (!canvas.msToBlob) {
saveAs(blob, "imageName.png");
setTimeout(function () {
window.close();
}, 500);
}
else //For IE
window.close();
});
现在即使窗口已关闭,下载提示选项也会出现。
canvas.toBlob(function (blob) {
var filesaver = saveAs(blob, "RQGantt.png");
filesaver.onwriteend = function() { window.close(); }
}
blob = new Blob([icsFileContents], {type: "application/octet-stream;charset=utf-8"});
var fileSaver = saveAs(blob, "calEvent.ics").onwriteend = function() {
setTimeout(function() { window.close(); }, 250);
};