FileSaver.js Chrome问题,多个文档

时间:2018-06-19 14:48:49

标签: javascript ajax filesaver.js

我正在使用Chrome v67和FileSaver.js。

此代码在FF&Edge中有效,但在Chrome中不可用。

var ajaxSettings = {
    url: "my/api/method",
    data: JSON.stringify(myItems),
    success: function (data) {
        if (data) {
            var dateToAppend = moment().format("YYYYMMDD-HHmmss");
            createPdf("pdfDoc_" + dateToAppend + ".pdf", data[0]);
            saveFile("txtDoc_" + dateToAppend + ".txt", data[1]);

            //sleep(2000).then(() => {
            //    saveFile("txtDoc_" + dateToAppend + ".txt", data[1]);
            //});
        }
    }
}

//function sleep(time) {
    //return new Promise((resolve) => setTimeout(resolve, time));
//}

function createPdf(filename, pdfBytes) {
    if (navigator.appVersion.indexOf("MSIE 9") > -1) {
        window.open("data:application/pdf;base64," + encodeURIComponent(pdfBytes));
    }
    else {
        saveFile(fileName, data);
    }
}

function saveFile(fileName, data) {
    var decodedByte64 = atob(data);
    var byteVals = new Array(decodedByte64.length);
    for (var i = 0; i < decodedByte64.length; i++) {
        byteVals[i] = decodedByte64.charCodeAt(i);
    }
    var byte8bitArray = new Uint8Array(byteVals);

    var blob = new Blob([byte8bitArray]);
    saveAs(blob, fileName); //FileSaver.js
}

调用API的结果是其中包含2个字节数组的数组。 字节数组就是文档。

如果我像用户那样运行此代码,则发生的情况是第一个文档被“下载”,而第二个文档没有被“下载”。尝试再次执行此操作而不刷新页面将导致没有文档被“下载”。 “下载”一词用引号引起来,因为它已经被下载了,我真正想做的是从字节数组生成文档。

这是奇怪的事情...如果我打开控制台并在“ saveFile”调用上放置一个断点,并在调试器到达该断点时立即单击继续,那么一切就很好了,下载了2个文档

最初,我认为这是一个计时问题,所以我为此延迟了2秒,以查看是否是事实,但事实并非如此。我唯一设法开始工作的就是断点,无论我希望他们做多少,我显然都无法说服用户开始做。

非常感谢任何帮助或指针

1 个答案:

答案 0 :(得分:0)

您可能在浏览器的左上角看到一条消息,指出

  

https://yoursite.com
  下载多个文件
  [阻止] [允许]

如果您不再使用它,可能是因为您单击了“阻止”。
您可以在chrome://settings/content/automaticDownloads中管理此限制。