在 FileSaver.js 中保存文件后关闭窗口

Raj*_*l 웃 5 javascript canvas

我正在使用FileSaver.js文件将我的画布保存为图像。下载后我必须关闭窗口。有没有办法实现这一目标?

这是我尝试过的代码,

canvas.toBlob(function (blob) {
    saveAs(blob, "RQGantt.png");
    window.close();
});
Run Code Online (Sandbox Code Playgroud)

它适用于小尺寸的图像。但是当我有大尺寸的图像时,我的窗口在开始下载之前关闭了。

有没有办法在客户端做到这一点?

Raj*_*l 웃 4

这是他们针对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();
});
Run Code Online (Sandbox Code Playgroud)

所以,现在即使窗口已经关闭,下载提示选项也会出现。